From 15f8b8b6ec5145a56d06d509b2e90076f75dd867 Mon Sep 17 00:00:00 2001 From: tsteven4 Date: Sun, 7 Feb 2016 14:05:51 -0700 Subject: [PATCH] pass files from main to formats as QStrings respecting the local encoding. --- alan.cc | 4 ++-- an1.cc | 4 ++-- bcr.cc | 11 +++-------- brauniger_iq.cc | 8 ++++---- bushnell.cc | 21 ++++++++++----------- bushnell_trl.cc | 10 ++++++---- compegps.cc | 4 ++-- cst.cc | 2 +- defs.h | 4 ++-- delbin.cc | 24 ++++++++++++------------ delgpl.cc | 4 ++-- destinator.cc | 4 ++-- dg-100.cc | 12 ++++++------ dmtlog.cc | 4 ++-- easygps.cc | 6 +++--- energympro.cc | 2 +- enigma.cc | 4 ++-- exif.cc | 21 ++++++++++----------- f90g_track.cc | 4 ++-- g7towin.cc | 2 +- garmin.cc | 21 ++++++++++++--------- garmin_fit.cc | 2 +- garmin_gpi.cc | 4 ++-- garmin_txt.cc | 4 ++-- garmin_xt.cc | 2 +- gbfile.cc | 3 ++- gdb.cc | 4 ++-- geo.cc | 4 ++-- ggv_bin.cc | 7 ++++--- ggv_log.cc | 4 ++-- ggv_ovl.cc | 6 +++--- globalsat_sport.cc | 10 +++++----- glogbook.cc | 4 ++-- gnav_trl.cc | 4 ++-- google.cc | 7 ++++--- googledir.cc | 2 +- gopal.cc | 20 +++++++++----------- gpssim.cc | 20 ++++++-------------- gpsutil.cc | 4 ++-- gpx.cc | 4 ++-- gtm.cc | 4 ++-- gtrnctr.cc | 4 ++-- hiketech.cc | 4 ++-- holux.cc | 4 ++-- html.cc | 2 +- humminbird.cc | 4 ++-- igc.cc | 6 +++--- ignrando.cc | 4 ++-- igo8.cc | 4 ++-- ik3d.cc | 2 +- itracku.cc | 20 ++++++++++---------- jogmap.cc | 2 +- jtr.cc | 4 ++-- kml.cc | 24 +++++++++++------------- lmx.cc | 4 ++-- lowranceusr.cc | 4 ++-- lowranceusr4.cc | 4 ++-- maggeo.cc | 4 ++-- magproto.cc | 43 ++++++++++++++++++++++--------------------- main.cc | 42 ++++++++++++++++++++++++++++++++---------- mapasia.cc | 4 ++-- mapbar_track.cc | 2 +- mapfactor.cc | 4 ++-- mapsend.cc | 4 ++-- mapsource.cc | 25 +++++++++++++------------ mmo.cc | 4 ++-- mtk_locus.cc | 14 +++++++------- mtk_logger.cc | 22 +++++++++++----------- mynav.cc | 2 +- navicache.cc | 6 +++--- naviguide.cc | 4 ++-- navilink.cc | 12 ++++++------ navitel.cc | 4 ++-- netstumbler.cc | 2 +- nmea.cc | 21 ++++++++++++--------- nmn4.cc | 4 ++-- osm.cc | 4 ++-- ozi.cc | 41 ++++++++++++++++++----------------------- pcx.cc | 4 ++-- pocketfms_bc.cc | 4 ++-- pocketfms_fp.cc | 4 ++-- pocketfms_wp.cc | 4 ++-- psitrex.cc | 4 ++-- random.cc | 2 +- raymarine.cc | 6 +++--- saroute.cc | 4 ++-- sbn.cc | 2 +- sbp.cc | 2 +- shape.cc | 27 ++++++++++++++------------- skyforce.cc | 4 ++-- skytraq.cc | 20 +++++++++----------- stmsdf.cc | 4 ++-- stmwpp.cc | 4 ++-- subrip.cc | 2 +- tef_xml.cc | 2 +- teletype.cc | 2 +- text.cc | 8 ++++---- tiger.cc | 4 ++-- tmpro.cc | 4 ++-- tomtom.cc | 4 ++-- tpg.cc | 4 ++-- tpo.cc | 4 ++-- unicsv.cc | 4 ++-- util.cc | 20 +++----------------- v900.cc | 8 ++++---- vcf.cc | 2 +- vidaone.cc | 4 ++-- vitosmt.cc | 4 ++-- vitovtt.cc | 2 +- vpl.cc | 4 ++-- wbt-200.cc | 10 +++++----- wfff_xml.cc | 2 +- wintec_tes.cc | 2 +- xcsv.cc | 10 +++++----- xmlgeneric.cc | 6 +++--- xmlgeneric.h | 2 +- xol.cc | 4 ++-- yahoo.cc | 4 ++-- 118 files changed, 436 insertions(+), 440 deletions(-) diff --git a/alan.cc b/alan.cc index 40d539da7..046e93259 100644 --- a/alan.cc +++ b/alan.cc @@ -959,7 +959,7 @@ static void trl_write(void) /**************************************************************************/ -static void alan_rd_init(const char* fname) +static void alan_rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); } @@ -971,7 +971,7 @@ static void alan_rd_deinit(void) } -static void alan_wr_init(const char* fname) +static void alan_wr_init(const QString& fname) { fout = gbfopen(fname, "wb", MYNAME); } diff --git a/an1.cc b/an1.cc index b261c82ff..2d4893b96 100644 --- a/an1.cc +++ b/an1.cc @@ -1190,7 +1190,7 @@ Init_Road_Changes(void) } static void -rd_init(const char* fname) +rd_init(const QString& fname) { infile = gbfopen_le(fname, "rb", MYNAME); } @@ -1211,7 +1211,7 @@ my_read(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { outfile = gbfopen_le(fname, "wb", MYNAME); Init_Output_Type(); diff --git a/bcr.cc b/bcr.cc index 87f5bb5c4..c4644a19c 100644 --- a/bcr.cc +++ b/bcr.cc @@ -50,7 +50,6 @@ */ static gbfile* fout; -static char* filename; static int curr_rte_num, target_rte_num; static double radius; static inifile_t* ini; @@ -191,10 +190,9 @@ bcr_init_radius(void) } static void -bcr_rd_init(const char* fname) +bcr_rd_init(const QString& fname) { - filename = xstrdup(fname); - ini = inifile_init(fname, MYNAME); + ini = inifile_init(qPrintable(fname), MYNAME); if (ini->unicode) { cet_convert_init(CET_CHARSET_UTF8, 1); } @@ -205,7 +203,6 @@ static void bcr_rd_deinit(void) { inifile_done(ini); - xfree(filename); } /* ------------------------------------------------------------*/ @@ -337,9 +334,8 @@ bcr_data_read(void) /* %%% bcr write support %%% ----------------------------------- */ static void -bcr_wr_init(const char* fname) +bcr_wr_init(const QString& fname) { - filename = xstrdup(fname); fout = gbfopen(fname, "wb", MYNAME); bcr_init_radius(); } @@ -348,7 +344,6 @@ static void bcr_wr_deinit(void) { gbfclose(fout); - xfree(filename); } static void diff --git a/brauniger_iq.cc b/brauniger_iq.cc index c2eecac1f..e31448a1a 100644 --- a/brauniger_iq.cc +++ b/brauniger_iq.cc @@ -56,13 +56,13 @@ inline state_t operator++(state_t& rs, int) static const int reqd_bytes[num_states] = { 6, 1, 2, 2, 25, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1 }; -static void rd_init(const char* fname) +static void rd_init(const QString& fname) { - if (serial_handle = gbser_init(fname), NULL == serial_handle) { - fatal(MYNAME ": Can't open port '%s'\n", fname); + if (serial_handle = gbser_init(qPrintable(fname)), NULL == serial_handle) { + fatal(MYNAME ": Can't open port '%s'\n", qPrintable(fname)); } if (gbser_set_port(serial_handle, 9600, 8, 0, 1) != gbser_OK) { - fatal(MYNAME ": Can't configure port '%s'\n", fname); + fatal(MYNAME ": Can't configure port '%s'\n", qPrintable(fname)); } } diff --git a/bushnell.cc b/bushnell.cc index 8fa844db9..f4cad0b26 100644 --- a/bushnell.cc +++ b/bushnell.cc @@ -22,10 +22,11 @@ #include "defs.h" #include +#include #define MYNAME "Bushnell" static gbfile* file_in; -static char* ofname; +static QString ofname; static short_handle mkshort_handle = NULL; static @@ -156,7 +157,7 @@ bushnell_get_name_from_symbol(signed int s) } static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen_le(fname, "rb", MYNAME); } @@ -168,20 +169,18 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { - char* dot, *slash; static char valid_chars [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789" ".-/\\~@#$%^&*()_+=<>" "abcdefghijklmnopqrstuvwxyz"; - ofname = xstrdup(fname); - // If user provided an extension in the pathname, whack it. - dot = strrchr(ofname, '.'); - slash = strrchr(ofname, GB_PATHSEP); - if (dot > slash) { - *dot = 0; + ofname = fname; + int suffix_len = QFileInfo(fname).suffix().length(); + if (suffix_len > 0) { + /* drop the suffix and the period */ + ofname.chop(suffix_len + 1); } mkshort_handle = mkshort_new_handle(); @@ -193,7 +192,7 @@ static void wr_deinit(void) { mkshort_del_handle(&mkshort_handle); - xfree(ofname); + ofname.clear(); } /* diff --git a/bushnell_trl.cc b/bushnell_trl.cc index 31f6c3d5b..7430e802b 100644 --- a/bushnell_trl.cc +++ b/bushnell_trl.cc @@ -34,7 +34,7 @@ arglist_t bushnell_args[] = { }; static void -rd_init(const char* fname) +rd_init(const QString& fname) { char h[0x14]; // Believed to be zero terminated. file_in = gbfopen_le(fname, "rb", MYNAME); @@ -53,15 +53,17 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { - int i,l = strlen(fname); + int i; + int l = fname.length(); char obuf[20] = { 0 } ; char* p = obuf; file_out = gbfopen_le(fname, "w", MYNAME); trkpt_count = 0; + QString fnameu = fname.toUpper(); for (i = 0; (i < l) && (i < 20); i++) { - char c = toupper(fname[i]); + char c = fnameu[i].toLatin1(); if (isalnum(c)) { *p++ = c; } diff --git a/compegps.cc b/compegps.cc index d367aa0fc..d7422131e 100644 --- a/compegps.cc +++ b/compegps.cc @@ -377,7 +377,7 @@ parse_rte_info(const char* buff, route_head* route) /* "R" */ /* main functions */ static void -compegps_rd_init(const char* fname) +compegps_rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); input_datum = DATUM_WGS84; @@ -612,7 +612,7 @@ write_waypoints(void) /* --------------------------------------------------------------------------- */ static void -compegps_wr_init(const char* fname) +compegps_wr_init(const QString& fname) { fout = gbfopen(fname, "w", MYNAME); sh = mkshort_new_handle(); diff --git a/cst.cc b/cst.cc index 04d4b3cc8..cfb4373aa 100644 --- a/cst.cc +++ b/cst.cc @@ -136,7 +136,7 @@ cst_make_url(char* str) /* --------------------------------------------------------------------------- */ static void -cst_rd_init(const char* fname) +cst_rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); temp_route = NULL; diff --git a/defs.h b/defs.h index 7c9a39f88..df2df9c51 100644 --- a/defs.h +++ b/defs.h @@ -605,7 +605,7 @@ typedef struct { extern posn_status tracking_status; -typedef void (*ff_init)(char const*); +typedef void (*ff_init)(const QString&); typedef void (*ff_deinit)(void); typedef void (*ff_read)(void); typedef void (*ff_write)(void); @@ -978,7 +978,7 @@ char* convert_human_date_format(const char* human_datef); /* "MM,YYYY,DD" -> "%m char* convert_human_time_format(const char* human_timef); /* "HH+mm+ss" -> "%H+%M+%S" */ char* pretty_deg_format(double lat, double lon, char fmt, const char* sep, int html); /* decimal -> dd.dddd or dd mm.mmm or dd mm ss */ -const char* get_filename(const char* fname); /* extract the filename portion */ +const QString get_filename(const QString& fname); /* extract the filename portion */ /* * Character encoding transformations. diff --git a/delbin.cc b/delbin.cc index 73c23791e..0e0ec2d05 100644 --- a/delbin.cc +++ b/delbin.cc @@ -63,7 +63,7 @@ added in the PN-40 2.5 firmware. //----------------------------------------------------------------------------- // interface to platform-specific device I/O typedef struct { - void (*init)(const char* name); + void (*init)(const QString& name); void (*deinit)(void); unsigned(*packet_read)(void*); unsigned(*packet_write)(const void*, unsigned); @@ -2298,7 +2298,7 @@ delbin_list_units() } static void -delbin_rw_init(const char* fname) +delbin_rw_init(const QString& fname) { message_t m; char buf[256]; @@ -2350,8 +2350,8 @@ delbin_rw_init(const char* fname) } message_free(&m); - if (strlen(fname) > 4) { - if (0 == strcmp(fname+4, "list")) { + if (fname.length() > 4) { + if (fname.mid(4,4) == "list") { delbin_list_units(); exit(1); } @@ -2465,7 +2465,7 @@ ff_vecs_t delbin_vecs = { static HANDLE hid_handle; static void -win_os_init(const char* fname) +win_os_init(const QString& fname) { GUID hid_guid; HDEVINFO dev_info; @@ -2630,7 +2630,7 @@ interrupt_report_cb(void* target, IOReturn result, void* refcon, void* sender, U } static void -mac_os_init(const char* fname) +mac_os_init(const QString& fname) { CFMutableDictionaryRef dict = IOServiceMatching(kIOHIDDeviceKey); io_service_t service; @@ -2749,7 +2749,7 @@ static int endpoint_in; static int endpoint_out; static void -libusb_os_init(const char* fname) +libusb_os_init(const QString& fname) { struct usb_bus* bus; const struct usb_endpoint_descriptor* endpoint_desc; @@ -2861,7 +2861,7 @@ static int fd_hiddev; static int linuxhid_os_init_status; static void -linuxhid_os_init(const char* fname) +linuxhid_os_init(const QString& fname) { struct hidraw_devinfo info; struct hiddev_field_info finfo; @@ -2869,8 +2869,8 @@ linuxhid_os_init(const char* fname) struct dirent* d; fd_hidraw = fd_hiddev = -1; - if (fname && memcmp(fname, "hid:", 4) == 0) { - char* raw_name = xstrdup(fname + 4); + if (fname.startsWith("hid:")) { + char* raw_name = xstrdup(qPrintable(fname.mid(4))); char* dev_name = strchr(raw_name, ','); if (dev_name == NULL) { fatal(MYNAME ": missing hiddev path\n"); @@ -2997,7 +2997,7 @@ static const delbin_os_ops_t linuxhid_os_ops = { }; static void -linux_os_init(const char* fname) +linux_os_init(const QString& fname) { // tell linuxhid_os_init not to exit linuxhid_os_init_status = 1; @@ -3030,7 +3030,7 @@ delbin_os_ops_t delbin_os_ops = { // stubs #if !(HAVE_WDK || __APPLE__ || HAVE_LIBUSB || HAVE_LINUX_HID) static void -stub_os_init(const char* fname) +stub_os_init(const QString& fname) { fatal(MYNAME ": OS not supported\n"); } diff --git a/delgpl.cc b/delgpl.cc index bb9a29d69..4607691e1 100644 --- a/delgpl.cc +++ b/delgpl.cc @@ -39,7 +39,7 @@ static gbfile* gplfile_in; static gbfile* gplfile_out; static void -gpl_rd_init(const char* fname) +gpl_rd_init(const QString& fname) { gplfile_in = gbfopen_le(fname, "rb", MYNAME); if (sizeof(struct gpl_point) != 56) { @@ -107,7 +107,7 @@ gpl_rd_deinit(void) } static void -gpl_wr_init(const char* fname) +gpl_wr_init(const QString& fname) { gplfile_out = gbfopen_le(fname, "wb", MYNAME); } diff --git a/destinator.cc b/destinator.cc index 3a8fd5e4e..07c6b2f56 100644 --- a/destinator.cc +++ b/destinator.cc @@ -481,7 +481,7 @@ destinator_rtept_disp(const Waypoint* wpt) *******************************************************************************/ static void -destinator_rd_init(const char* fname) +destinator_rd_init(const QString& fname) { fin = gbfopen_le(fname, "rb", MYNAME); } @@ -514,7 +514,7 @@ destinator_read_trk_wrapper(void) } static void -destinator_wr_init(const char* fname) +destinator_wr_init(const QString& fname) { fout = gbfopen_le(fname, "wb", MYNAME); } diff --git a/dg-100.cc b/dg-100.cc index 9f519a5ed..238ffaf4e 100644 --- a/dg-100.cc +++ b/dg-100.cc @@ -710,13 +710,13 @@ arglist_t dg100_args[] = { *******************************************************************************/ static void -common_rd_init(const char* fname) +common_rd_init(const QString& fname) { - if (serial_handle = gbser_init(fname), NULL == serial_handle) { - fatal(MYNAME ": Can't open port '%s'\n", fname); + if (serial_handle = gbser_init(qPrintable(fname)), NULL == serial_handle) { + fatal(MYNAME ": Can't open port '%s'\n", qPrintable(fname)); } if (gbser_set_speed(serial_handle, model->speed) != gbser_OK) { - fatal(MYNAME ": Can't configure port '%s'\n", fname); + fatal(MYNAME ": Can't configure port '%s'\n", qPrintable(fname)); } // Toss anything that came in before our speed was set, particularly // for the bluetooth BT-335 product. @@ -724,7 +724,7 @@ common_rd_init(const char* fname) } static void -dg100_rd_init(const char* fname) +dg100_rd_init(const QString& fname) { static const model_t dg100_model = { "DG-100", 115200, 1, 1, dg100_commands, sizeof(dg100_commands) / sizeof(struct dg100_command) }; model = &dg100_model; @@ -732,7 +732,7 @@ dg100_rd_init(const char* fname) } static void -dg200_rd_init(const char* fname) +dg200_rd_init(const QString& fname) { static const model_t dg200_model = { "DG-200", 230400, 0, 0, dg200_commands, sizeof(dg200_commands) / sizeof(struct dg100_command) }; model = &dg200_model; diff --git a/dmtlog.cc b/dmtlog.cc index 00d3de903..f535a5a11 100644 --- a/dmtlog.cc +++ b/dmtlog.cc @@ -672,7 +672,7 @@ read_XML(void) *******************************************************************************/ static void -dmtlog_rd_init(const char* fname) +dmtlog_rd_init(const QString& fname) { fin = gbfopen_le(fname, "rb", MYNAME); @@ -718,7 +718,7 @@ dmtlog_read(void) } static void -dmtlog_wr_init(const char* fname) +dmtlog_wr_init(const QString& fname) { fout = gbfopen_le(fname, "wb", MYNAME); } diff --git a/easygps.cc b/easygps.cc index 79f1c7ed5..6b641024d 100644 --- a/easygps.cc +++ b/easygps.cc @@ -37,7 +37,7 @@ arglist_t easygps_args[] = { }; static void -rd_init(const char* fname) +rd_init(const QString& fname) { int sz; char ibuf[100] = {'0'} ; @@ -50,7 +50,7 @@ rd_init(const char* fname) if ((sz < 52) || strncmp(ibuf, ezsig, sizeof(ezsig)-1) || (ibuf[51] != 'W')) { - fatal(MYNAME ": %s is not an EasyGPS file.\n", fname); + fatal(MYNAME ": %s is not an EasyGPS file.\n", qPrintable(fname)); } } @@ -61,7 +61,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen_le(fname, "wb", MYNAME); mkshort_handle = mkshort_new_handle(); diff --git a/energympro.cc b/energympro.cc index 99bca0ee6..b2c53eaf3 100644 --- a/energympro.cc +++ b/energympro.cc @@ -206,7 +206,7 @@ read_lap(void) //******************************************************************************* static void -rd_init(const char* fname) +rd_init(const QString& fname) { if (global_opts.debug_level > 1) { printf (MYNAME " rd_deinit()\n"); diff --git a/enigma.cc b/enigma.cc index 1be9e389b..8799a47b4 100644 --- a/enigma.cc +++ b/enigma.cc @@ -76,7 +76,7 @@ typedef struct enigma_wpt { static gbfile* file_in, *file_out; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen_le(fname, "rb", MYNAME); } @@ -154,7 +154,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen_le(fname, "wb", MYNAME); } diff --git a/exif.cc b/exif.cc index 0e66d33f7..d8604c472 100644 --- a/exif.cc +++ b/exif.cc @@ -34,6 +34,7 @@ #include #include #include +#include #define MYNAME "exif" @@ -135,7 +136,7 @@ static exif_app_t* exif_app; const Waypoint* exif_wpt_ref; time_t exif_time_ref; static char exif_success; -static char* exif_fout_name; +static QString exif_fout_name; static char* opt_filename, *opt_overwrite, *opt_frame, *opt_name; @@ -1340,7 +1341,7 @@ exif_write_apps(void) *******************************************************************************/ static void -exif_rd_init(const char* fname) +exif_rd_init(const QString& fname) { fin = gbfopen_be(fname, "rb", MYNAME); QUEUE_INIT(&exif_apps); @@ -1373,12 +1374,12 @@ exif_read(void) } static void -exif_wr_init(const char* fname) +exif_wr_init(const QString& fname) { uint16_t soi; exif_success = 0; - exif_fout_name = xstrdup(fname); + exif_fout_name = fname; QUEUE_INIT(&exif_apps); @@ -1405,23 +1406,21 @@ exif_wr_init(const char* fname) static void exif_wr_deinit(void) { - char* tmpname; exif_release_apps(); - tmpname = xstrdup(fout->name); + QString tmpname = QString::fromLocal8Bit(fout->name); gbfclose(fout); if (exif_success) { if (*opt_overwrite == '1') { - remove(exif_fout_name); - rename(tmpname, exif_fout_name); + QFile::remove(exif_fout_name); + QFile::rename(tmpname, exif_fout_name); } } else { - remove(tmpname); + QFile::remove(tmpname); } - xfree(exif_fout_name); - xfree(tmpname); + exif_fout_name.clear(); } static void diff --git a/f90g_track.cc b/f90g_track.cc index 08f7b00e5..134347fc0 100644 --- a/f90g_track.cc +++ b/f90g_track.cc @@ -51,7 +51,7 @@ arglist_t f90g_track_args[] = { *******************************************************************************/ #define VALIDHEADER "MEDIA 1." static void -f90g_track_rd_init(const char* fname) +f90g_track_rd_init(const QString& fname) { char header[HEADERRECORDSIZE]; @@ -70,7 +70,7 @@ f90g_track_rd_init(const char* fname) // start the track list track = route_head_alloc(); is_fatal((track == NULL), MYNAME ": memory non-enough"); - track->rte_name = QString::fromLatin1(fname); + track->rte_name = fname; track_add_head(track); } } diff --git a/g7towin.cc b/g7towin.cc index db6de36dd..1e0997b4f 100644 --- a/g7towin.cc +++ b/g7towin.cc @@ -389,7 +389,7 @@ parse_categories(char* buff) /* main functions */ static void -rd_init(const char* fname) +rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); diff --git a/garmin.cc b/garmin.cc index 337331101..87cf51f76 100644 --- a/garmin.cc +++ b/garmin.cc @@ -110,7 +110,7 @@ static int d103_icon_number_from_symbol(const QString& s); static void -rw_init(const char* fname) +rw_init(const QString& fname) { int receiver_short_length; int receiver_must_upper = 1; @@ -130,7 +130,7 @@ rw_init(const char* fname) GPS_Enable_Error(); if (poweroff) { - GPS_Command_Off(fname); + GPS_Command_Off(qPrintable(fname)); return; } @@ -140,7 +140,7 @@ rw_init(const char* fname) * an affected unit. */ if (resettime) { - GPS_Command_Send_Time(fname, current_time().toTime_t()); + GPS_Command_Send_Time(qPrintable(fname), current_time().toTime_t()); return; } @@ -162,10 +162,10 @@ rw_init(const char* fname) } } - if (GPS_Init(fname) < 0) { - fatal(MYNAME ":Can't init %s\n", fname); + if (GPS_Init(qPrintable(fname)) < 0) { + fatal(MYNAME ":Can't init %s\n", qPrintable(fname)); } - portname = fname; + portname = xstrdup(qPrintable(fname)); if (baud && baud != DEFAULT_BAUD) { if (0 == GPS_Set_Baud_Rate(portname, baud)) { @@ -327,7 +327,7 @@ rw_init(const char* fname) } static void -rd_init(const char* fname) +rd_init(const QString& fname) { if (setjmp(gdx_jmp_buf)) { const char* vec_opts = NULL; @@ -352,6 +352,9 @@ rw_deinit(void) if (mkshort_handle) { mkshort_del_handle(&mkshort_handle); } + + xfree(portname); + portname = NULL; } static int @@ -774,10 +777,10 @@ pvt2wpt(GPS_PPvt_Data pvt, Waypoint* wpt) static gpsdevh* pvt_fd; static void -pvt_init(const char* fname) +pvt_init(const QString& fname) { rw_init(fname); - GPS_Command_Pvt_On(fname, &pvt_fd); + GPS_Command_Pvt_On(qPrintable(fname), &pvt_fd); } static Waypoint* diff --git a/garmin_fit.cc b/garmin_fit.cc index b1614b30f..c7cf88565 100644 --- a/garmin_fit.cc +++ b/garmin_fit.cc @@ -59,7 +59,7 @@ static gbfile* fin; *******************************************************************************/ static void -fit_rd_init(const char* fname) +fit_rd_init(const QString& fname) { fin = gbfopen_le(fname, "rb", MYNAME); } diff --git a/garmin_gpi.cc b/garmin_gpi.cc index cae6f1d42..98093dc79 100644 --- a/garmin_gpi.cc +++ b/garmin_gpi.cc @@ -1433,7 +1433,7 @@ load_bitmap_from_file(const char* fname, unsigned char** data, int* data_sz) *******************************************************************************/ static void -garmin_gpi_rd_init(const char* fname) +garmin_gpi_rd_init(const QString& fname) { fin = gbfopen_le(fname, "rb", MYNAME); rdata = new reader_data_t; @@ -1455,7 +1455,7 @@ garmin_gpi_rd_init(const char* fname) static void -garmin_gpi_wr_init(const char* fname) +garmin_gpi_wr_init(const QString& fname) { int i; diff --git a/garmin_txt.cc b/garmin_txt.cc index 182c88a61..015c7c2c5 100644 --- a/garmin_txt.cc +++ b/garmin_txt.cc @@ -753,7 +753,7 @@ track_disp_wpt_cb(const Waypoint* wpt) *******************************************************************************/ static void -garmin_txt_wr_init(const char* fname) +garmin_txt_wr_init(const QString& fname) { const char* grid_str; @@ -1343,7 +1343,7 @@ parse_track_waypoint(void) /***************************************************************/ static void -garmin_txt_rd_init(const char* fname) +garmin_txt_rd_init(const QString& fname) { memset(>xt_flags, 0, sizeof(gtxt_flags)); diff --git a/garmin_xt.cc b/garmin_xt.cc index 6d98d59b9..b91e98e2e 100644 --- a/garmin_xt.cc +++ b/garmin_xt.cc @@ -72,7 +72,7 @@ arglist_t format_garmin_xt_args[] = { * %%% Reader callbacks %%% * *******************************************************************************/ static void -format_garmin_xt_rd_init(const char* fname) +format_garmin_xt_rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); } diff --git a/gbfile.cc b/gbfile.cc index 13f7019db..193494391 100644 --- a/gbfile.cc +++ b/gbfile.cc @@ -538,7 +538,8 @@ gbfopen(const QString filename, const char* mode, const char* module) file->fileungetc = memapi_ungetc; file->filewrite = memapi_write; } else { - file->name = xstrdup(filename); + /* Be careful to convert back to local8Bit for these c based APIS */ + file->name = xstrdup(qPrintable(filename)); file->is_pipe = (filename == "-"); /* Do we have a '.gz' extension in the filename ? */ diff --git a/gdb.cc b/gdb.cc index ce463eb84..fb25c35e2 100644 --- a/gdb.cc +++ b/gdb.cc @@ -1004,7 +1004,7 @@ read_track(void) /*******************************************************************************/ static void -gdb_rd_init(const char* fname) +gdb_rd_init(const QString& fname) { fin = gbfopen_le(fname, "rb", MYNAME); ftmp = gbfopen_le(NULL, "wb", MYNAME); @@ -1773,7 +1773,7 @@ write_track_cb(const route_head* trk) /*-----------------------------------------------------------------------------*/ static void -gdb_wr_init(const char* fname) +gdb_wr_init(const QString& fname) { fout = gbfopen_le(fname, "wb", MYNAME); ftmp = gbfopen_le(NULL, "wb", MYNAME); diff --git a/geo.cc b/geo.cc index 192be2092..5c785f381 100644 --- a/geo.cc +++ b/geo.cc @@ -95,7 +95,7 @@ void GeoReadLoc() } static void -geo_rd_init(const char* fname) +geo_rd_init(const QString& fname) { geo_read_fname = fname; } @@ -157,7 +157,7 @@ geo_rd_deinit(void) } static void -geo_wr_init(const char* fname) +geo_wr_init(const QString& fname) { ofd = gbfopen(fname, "w", MYNAME); diff --git a/ggv_bin.cc b/ggv_bin.cc index 36f9ef8f1..9a616cfe5 100644 --- a/ggv_bin.cc +++ b/ggv_bin.cc @@ -481,14 +481,15 @@ ggv_bin_read_file(QDataStream& stream) } static void -ggv_bin_read_init(const char* fname) +ggv_bin_read_init(const QString& fname) { - read_fname = QString::fromUtf8(fname); + read_fname = fname; } static void ggv_bin_read_deinit(void) { + read_fname.clear(); } static void @@ -497,7 +498,7 @@ ggv_bin_read(void) QFile file(read_fname); if (!file.open(QIODevice::ReadOnly)) { - fatal(MYNAME ": Error opening file %s\n", read_fname.toStdString().c_str()); + fatal(MYNAME ": Error opening file %s\n", qPrintable(read_fname)); } QDataStream stream(&file); diff --git a/ggv_log.cc b/ggv_log.cc index 0db3867fe..c026bee54 100644 --- a/ggv_log.cc +++ b/ggv_log.cc @@ -44,7 +44,7 @@ arglist_t ggv_log_args[] = { *******************************************************************************/ static void -ggv_log_rd_init(const char* fname) +ggv_log_rd_init(const QString& fname) { static char magic[32]; int len = 0; @@ -190,7 +190,7 @@ ggv_log_read(void) } static void -ggv_log_wr_init(const char* fname) +ggv_log_wr_init(const QString& fname) { fout = gbfopen(fname, "wb", MYNAME); diff --git a/ggv_ovl.cc b/ggv_ovl.cc index 36171c445..ae7c22bf6 100644 --- a/ggv_ovl.cc +++ b/ggv_ovl.cc @@ -80,9 +80,9 @@ static OVL_COLOR_TYP color; *******************************************************************************/ static void -ggv_ovl_rd_init(const char* fname) +ggv_ovl_rd_init(const QString& fname) { - inifile = inifile_init(fname, MYNAME); + inifile = inifile_init(qPrintable(fname), MYNAME); if (inifile->unicode) { cet_convert_init(CET_CHARSET_UTF8, 1); } @@ -214,7 +214,7 @@ static int get_direction(const Waypoint* A, const Waypoint* B); /* -----------------------------------------------------------------------*/ static void -ggv_ovl_wr_init(const char* fname) +ggv_ovl_wr_init(const QString& fname) { fout = gbfopen(fname, "w", MYNAME); diff --git a/globalsat_sport.cc b/globalsat_sport.cc index 81d0b54f5..43cd8b2d1 100644 --- a/globalsat_sport.cc +++ b/globalsat_sport.cc @@ -406,7 +406,7 @@ globalsat_probe_device() } static void -rd_init(const char* fname) +rd_init(const QString& fname) { if (global_opts.debug_level > 1) { printf(MYNAME " rd_init()\n"); @@ -422,23 +422,23 @@ rd_init(const char* fname) } } if (!opt_input_dump_file) { - serial_init(fname); + serial_init(qPrintable(fname)); } else { // read from dump-file instead of serial in_file = gbfopen(fname, "r", MYNAME); - is_fatal(!in_file, "Could not open dumpfile for input: %s", fname); + is_fatal(!in_file, "Could not open dumpfile for input: %s", qPrintable(fname)); } globalsat_probe_device(); } static void -wr_init(const char* fname) +wr_init(const QString& fname) { if (global_opts.debug_level > 1) { printf(MYNAME " wr_init()\n"); } - serial_init(fname); + serial_init(qPrintable(fname)); } diff --git a/glogbook.cc b/glogbook.cc index 8568c0d97..2ab3de478 100644 --- a/glogbook.cc +++ b/glogbook.cc @@ -61,7 +61,7 @@ static xg_tag_mapping gl_map[] = { }; static void -glogbook_rd_init(const char* fname) +glogbook_rd_init(const QString& fname) { xml_init(fname, gl_map, NULL); } @@ -79,7 +79,7 @@ glogbook_rd_deinit(void) } static void -glogbook_wr_init(const char* fname) +glogbook_wr_init(const QString& fname) { ofd = gbfopen(fname, "w", MYNAME); writer.setAutoFormatting(true); diff --git a/gnav_trl.cc b/gnav_trl.cc index 663ae3379..efbdc2fd7 100644 --- a/gnav_trl.cc +++ b/gnav_trl.cc @@ -43,13 +43,13 @@ static gbfile* fin, *fout; *******************************************************************************/ static void -gnav_trl_rd_init(const char* fname) +gnav_trl_rd_init(const QString& fname) { fin = gbfopen_le(fname, "rb", MYNAME); } static void -gnav_trl_rw_init(const char* fname) +gnav_trl_rw_init(const QString& fname) { fout = gbfopen_le(fname, "wb", MYNAME); } diff --git a/google.cc b/google.cc index 86bdfc44c..1f8a9b555 100644 --- a/google.cc +++ b/google.cc @@ -30,7 +30,7 @@ static QString script; static route_head** routehead; static int* routecount; static short_handle desc_handle; -static const char* rd_fname; +static QString rd_fname; static int serial = 0; @@ -231,7 +231,7 @@ void goog_poly_e(xg_string args, const QXmlStreamAttributes*) } static void -google_rd_init(const char* fname) +google_rd_init(const QString& fname) { rd_fname = fname; @@ -244,7 +244,7 @@ google_rd_init(const char* fname) static void goog_read_file(void) { - QFile src(QString::fromUtf8(rd_fname)); + QFile src(rd_fname); src.open(QIODevice::ReadOnly); @@ -538,6 +538,7 @@ google_rd_deinit(void) { xml_deinit(); mkshort_del_handle(&desc_handle); + rd_fname.clear(); } ff_vecs_t google_vecs = { diff --git a/googledir.cc b/googledir.cc index 6ed31e102..3058958c4 100644 --- a/googledir.cc +++ b/googledir.cc @@ -130,7 +130,7 @@ goog_poly_e(xg_string args, const QXmlStreamAttributes*) } static void -google_rd_init(const char* fname) +google_rd_init(const QString& fname) { desc_handle = mkshort_new_handle(); setshort_length(desc_handle, 12); diff --git a/gopal.cc b/gopal.cc index dcda8f7a2..95ee92bbd 100644 --- a/gopal.cc +++ b/gopal.cc @@ -100,11 +100,9 @@ int gopal_check_line(char* line) *******************************************************************************/ static void -gopal_rd_init(const char* fname) +gopal_rd_init(const QString& fname) { - char buff[32]; char* ck; - const char* filename; CHECK_BOOL(optclean); if (optminspeed) { minspeed=atof(optminspeed); @@ -128,7 +126,6 @@ gopal_rd_init(const char* fname) fin = gbfopen(fname, "r", MYNAME); - memset(buff,0,sizeof(buff)); if (optdate) { memset(&opt_tm, 0, sizeof(opt_tm)); @@ -142,15 +139,16 @@ gopal_rd_init(const char* fname) } else { /* remove path */ - filename = get_filename(fname); + QString filename = get_filename(fname); + QString datestr; - if ((strncmp(filename,"track",5)==0)&&(strlen(filename)>13)) { // we need at least 13 letters: trackYYYYMMDD... - strncpy(&buff[0],&filename[5],8); - } else if ((strncmp(filename,"A_",2)==0)&&(strlen(filename)>10)) { // here we expect at least 10 letters: A_YYYYMMDD... - strncpy(&buff[0],&filename[2],8); + if (filename.startsWith("track")&&(filename.length()>13)) { // we need at least 13 letters: trackYYYYMMDD... + datestr = filename.mid(5,8); + } else if (filename.startsWith("A_")&&(filename.length()>10)) { // here we expect at least 10 letters: A_YYYYMMDD... + datestr = filename.mid(2,8); } // in buff we should now have something wich looks like a valid date starting with YYYYMMDD - /*ck = (char*)*/strptime(buff, "%Y%m%d", &filenamedate); + /*ck = (char*)*/strptime(qPrintable(datestr), "%Y%m%d", &filenamedate); // if (((ck == NULL) || (*ck != '\0') )&&!(optdate)) // fatal(MYNAME ": Invalid date in filename \"%s\", try to set manually using \"date\" switch!\n", buff); // /* else */ if (filenamedate.tm_year < 70) @@ -377,7 +375,7 @@ gopal_write_waypt(const Waypoint* wpt) static void -gopal_wr_init(const char* fname) +gopal_wr_init(const QString& fname) { fout = gbfopen(fname, "w", MYNAME); } diff --git a/gpssim.cc b/gpssim.cc index 6b9300a14..ef3b64e9d 100644 --- a/gpssim.cc +++ b/gpssim.cc @@ -31,7 +31,7 @@ static gbfile* fout; static char* wayptspd; static char* splitfiles_opt; static int splitfiles; -static char* fnamestr; +static QString fnamestr; static int trk_count; static int doing_tracks; @@ -56,9 +56,9 @@ arglist_t gpssim_args[] = { */ static void -gpssim_wr_init(const char* fname) +gpssim_wr_init(const QString& fname) { - fnamestr = xstrdup(fname); + fnamestr = fname; trk_count = 0; splitfiles = splitfiles_opt ? atoi(splitfiles_opt) : 0; @@ -80,7 +80,7 @@ gpssim_wr_deinit(void) fout = NULL; } - xfree(fnamestr); + fnamestr.clear(); } @@ -144,19 +144,13 @@ static void gpssim_trk_hdr(const route_head* rh) { if (splitfiles) { - char c[1024]; - char* ofname = xstrdup(fnamestr); if (fout) { fatal(MYNAME ": output file already open.\n"); } - snprintf(c, sizeof(c), "%s%04d.gpssim", - doing_tracks ? "-track" : "-route", - trk_count++); - ofname = xstrappend(ofname, c); + QString ofname = QString("%1%2%3.gpssim").arg(fnamestr).arg(doing_tracks ? "-track" : "-route").arg(trk_count++, 4, 10, QChar('0')); fout = gbfopen(ofname, "wb", MYNAME); - xfree(ofname); } track_recompute(rh, NULL); } @@ -175,10 +169,8 @@ gpssim_write(void) { if (waypt_count()) { if (splitfiles) { - char* ofname = xstrdup(fnamestr); - ofname = xstrappend(ofname, "-waypoints.gpssim"); + QString ofname = fnamestr + "-waypoints.gpssim"; fout = gbfopen(ofname, "wb", MYNAME); - xfree(ofname); } if (wayptspd && wayptspd[0]) { gpssim_write_spd(atof(wayptspd)); diff --git a/gpsutil.cc b/gpsutil.cc index 8dadf170e..a43609d2c 100644 --- a/gpsutil.cc +++ b/gpsutil.cc @@ -33,7 +33,7 @@ static short_handle mkshort_handle; #define MYNAME "GPSUTIL" static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen(fname, "rb", MYNAME); } @@ -45,7 +45,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen(fname, "w", MYNAME); mkshort_handle = mkshort_new_handle(); diff --git a/gpx.cc b/gpx.cc index 67e10158d..3b3b963c3 100644 --- a/gpx.cc +++ b/gpx.cc @@ -1188,7 +1188,7 @@ gpx_cdata(const QString& s) } static void -gpx_rd_init(const char* fname) +gpx_rd_init(const QString& fname) { iqfile = new gpsbabel::File(fname); iqfile->open(QIODevice::ReadOnly); @@ -1228,7 +1228,7 @@ gpx_rd_deinit(void) } static void -gpx_wr_init(const char* fname) +gpx_wr_init(const QString& fname) { mkshort_handle = NULL; oqfile = new gpsbabel::File(fname); diff --git a/gtm.cc b/gtm.cc index 5b4bf52dc..99ae66e5e 100644 --- a/gtm.cc +++ b/gtm.cc @@ -392,7 +392,7 @@ void convert_datum(double* lat, double* lon) /* Callbacks */ static void -gtm_rd_init(const char* fname) +gtm_rd_init(const QString& fname) { int version; file_in = gbfopen_le(fname, "rb", MYNAME); @@ -446,7 +446,7 @@ static void count_track_waypts(const Waypoint* wpt) } static void -gtm_wr_init(const char* fname) +gtm_wr_init(const QString& fname) { rt_count = tr_count = 0; track_disp_all(NULL, NULL, count_track_waypts); diff --git a/gtrnctr.cc b/gtrnctr.cc index 4ee09e229..14eb0d700 100644 --- a/gtrnctr.cc +++ b/gtrnctr.cc @@ -170,7 +170,7 @@ gtc_tags_to_ignore[] = { }; static void -gtc_rd_init(const char* fname) +gtc_rd_init(const QString& fname) { xml_init(fname, gtc_map, NULL); xml_ignore_tags(gtc_tags_to_ignore); @@ -189,7 +189,7 @@ gtc_rd_deinit(void) } static void -gtc_wr_init(const char* fname) +gtc_wr_init(const QString& fname) { int i; diff --git a/hiketech.cc b/hiketech.cc index d710f6f88..1b3748661 100644 --- a/hiketech.cc +++ b/hiketech.cc @@ -79,7 +79,7 @@ static xg_tag_mapping ht_map[] = { }; static void -hiketech_rd_init(const char* fname) +hiketech_rd_init(const QString& fname) { xml_init(fname, ht_map, NULL); } @@ -97,7 +97,7 @@ hiketech_rd_deinit(void) } static void -hiketech_wr_init(const char* fname) +hiketech_wr_init(const QString& fname) { ofd = gbfopen(fname, "w", MYNAME); diff --git a/holux.cc b/holux.cc index 8f2aa80a8..42252520b 100644 --- a/holux.cc +++ b/holux.cc @@ -38,7 +38,7 @@ static short_handle mkshort_handle; #define MYNAME "Holux" -static void rd_init(const char* fname) +static void rd_init(const QString& fname) { file_in = gbfopen_le(fname, "rb", MYNAME); } @@ -54,7 +54,7 @@ static void rd_deinit(void) static void -wr_init(const char* fname) +wr_init(const QString& fname) { mkshort_handle = mkshort_new_handle(); diff --git a/html.cc b/html.cc index 91b52a663..dd24447a9 100644 --- a/html.cc +++ b/html.cc @@ -65,7 +65,7 @@ arglist_t html_args[] = { static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen(fname, "w", MYNAME); mkshort_handle = mkshort_new_handle(); diff --git a/humminbird.cc b/humminbird.cc index 3d70ebcfd..7159aa0e8 100644 --- a/humminbird.cc +++ b/humminbird.cc @@ -250,7 +250,7 @@ inverse_gudermannian_i1924(const double x) *******************************************************************************/ static void -humminbird_rd_init(const char* fname) +humminbird_rd_init(const QString& fname) { fin = gbfopen_be(fname, "rb", MYNAME); } @@ -642,7 +642,7 @@ humminbird_read(void) /************************************************************************************************/ static void -humminbird_wr_init(const char* fname) +humminbird_wr_init(const QString& fname) { fout = gbfopen_be(fname, "wb", MYNAME); diff --git a/igc.cc b/igc.cc index 1ad76f2e0..449a75117 100644 --- a/igc.cc +++ b/igc.cc @@ -119,7 +119,7 @@ retry: return (igc_rec_type_t) c[0]; } -static void rd_init(const char* fname) +static void rd_init(const QString& fname) { char* ibuf; @@ -127,7 +127,7 @@ static void rd_init(const char* fname) lineno = 0; // File must begin with a manufacturer/ID record if (get_record(&ibuf) != rec_manuf_id || sscanf(ibuf, "A%3[A-Z]", manufacturer) != 1) { - fatal(MYNAME ": %s is not an IGC file\n", fname); + fatal(MYNAME ": %s is not an IGC file\n", qPrintable(fname)); } } @@ -911,7 +911,7 @@ static void wr_track(void) } } -static void wr_init(const char* fname) +static void wr_init(const QString& fname) { file_out = gbfopen(fname, "wb", MYNAME); } diff --git a/ignrando.cc b/ignrando.cc index d134fb642..79e44067a 100644 --- a/ignrando.cc +++ b/ignrando.cc @@ -140,7 +140,7 @@ ignr_etape_alt(xg_string args, const QXmlStreamAttributes* attrv) /* callbacks registered in ignr_vecs */ static void -ignr_rd_init(const char* fname) +ignr_rd_init(const QString& fname) { xml_init(fname, ignr_xml_map, NULL); wpt = NULL; @@ -164,7 +164,7 @@ ignr_read(void) /* callbacks registered in ignr_vecs */ static void -ignr_rw_init(const char* fname) +ignr_rw_init(const QString& fname) { fout = gbfopen(fname, "w", MYNAME); } diff --git a/igo8.cc b/igo8.cc index bbc919327..85937e2eb 100644 --- a/igo8.cc +++ b/igo8.cc @@ -132,7 +132,7 @@ static void igo8_check_type_sizes() } // Reader initialization callback -static void igo8_read_init(const char* fname) +static void igo8_read_init(const QString& fname) { igo8_file_in = gbfopen_le(fname, "rb", MYNAME); @@ -177,7 +177,7 @@ static void igo8_read_deinit(void) } // Writer initialize callback -static void igo8_write_init(const char* fname) +static void igo8_write_init(const QString& fname) { igo8_file_out = gbfopen_le(fname, "wb", MYNAME); diff --git a/ik3d.cc b/ik3d.cc index fd853ef72..37042437d 100644 --- a/ik3d.cc +++ b/ik3d.cc @@ -120,7 +120,7 @@ iktobj_type(xg_string args, const QXmlStreamAttributes*) } static void -ikt_rd_init(const char* fname) +ikt_rd_init(const QString& fname) { xml_init(fname, ikt_map, NULL); diff --git a/itracku.cc b/itracku.cc index 959931f7d..46119af6b 100644 --- a/itracku.cc +++ b/itracku.cc @@ -362,7 +362,7 @@ arglist_t itracku_args[] = { *******************************************************************************/ static void -itracku_rd_init_common(const char* fname) +itracku_rd_init_common(const QString& fname) { new_waypoint_count = 0; @@ -377,11 +377,11 @@ itracku_rd_init_common(const char* fname) } static void -itracku_rd_ser_init(const char* fname) +itracku_rd_ser_init(const QString& fname) { #if LATER int i; - if (0 == strcmp(fname, port_auto_detect_filename)) { + if (0 == strcmp(qPrintable(fname), port_auto_detect_filename)) { dbg(1, "auto detecting port for iTrackU device"); for (i=1; !fd && i* gx_trk_times; @@ -460,7 +460,7 @@ void gx_trk_coord(xg_string args, const QXmlStreamAttributes*) static void -kml_rd_init(const char* fname) +kml_rd_init(const QString& fname) { xml_init(fname, kml_map, NULL); xml_ignore_tags(kml_tags_to_ignore); @@ -480,7 +480,7 @@ kml_rd_deinit(void) } static void -kml_wr_init(const char* fname) +kml_wr_init(const QString& fname) { char u = 's'; waypt_init_bounds(&kml_bounds); @@ -523,10 +523,10 @@ kml_wr_init(const char* fname) * updated. */ static void -kml_wr_position_init(const char* fname) +kml_wr_position_init(const QString& fname) { posnfilename = fname; - posnfilenametmp = xstrappend(xstrdup(fname), "-"); + posnfilenametmp = QString("%1-").arg(fname); realtime_positioning = 1; /* @@ -548,12 +548,12 @@ kml_wr_deinit(void) delete oqfile; oqfile = NULL; - if (posnfilenametmp) { + if (!posnfilenametmp.isEmpty()) { #if __WIN32__ - MoveFileExA(posnfilenametmp, posnfilename, + MoveFileExA(qPrintable(posnfilenametmp), qPrintable(posnfilename), MOVEFILE_REPLACE_EXISTING); #endif - rename(posnfilenametmp, posnfilename); + QFile::rename(posnfilenametmp, posnfilename); } } @@ -561,10 +561,8 @@ static void kml_wr_position_deinit(void) { // kml_wr_deinit(); - if (posnfilenametmp) { - xfree(posnfilenametmp); - posnfilenametmp = NULL; - } + posnfilename.clear(); + posnfilenametmp.clear(); } diff --git a/lmx.cc b/lmx.cc index 66b07efb0..b73bedee9 100644 --- a/lmx.cc +++ b/lmx.cc @@ -55,7 +55,7 @@ arglist_t lmx_args[] = { static void -lmx_wr_init(const char* fname) +lmx_wr_init(const QString& fname) { ofd = gbfopen(fname, "w", MYNAME); } @@ -316,7 +316,7 @@ static xg_tag_mapping gl_map[] = { }; static void -lmx_rd_init(const char* fname) +lmx_rd_init(const QString& fname) { xml_init(fname, gl_map, NULL); } diff --git a/lowranceusr.cc b/lowranceusr.cc index c2197569e..653b07ddb 100644 --- a/lowranceusr.cc +++ b/lowranceusr.cc @@ -324,7 +324,7 @@ arglist_t lowranceusr_args[] = { }; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen_le(fname, "rb", MYNAME); } @@ -336,7 +336,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen_le(fname, "wb", MYNAME); mkshort_handle = mkshort_new_handle(); diff --git a/lowranceusr4.cc b/lowranceusr4.cc index fde70a824..f2470453e 100644 --- a/lowranceusr4.cc +++ b/lowranceusr4.cc @@ -159,7 +159,7 @@ arglist_t lowranceusr4_args[] = { }; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen_le(fname, "rb", MYNAME); } @@ -171,7 +171,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen_le(fname, "wb", MYNAME); mkshort_handle = mkshort_new_handle(); diff --git a/maggeo.cc b/maggeo.cc index a50ccbfea..9bf92bb1b 100644 --- a/maggeo.cc +++ b/maggeo.cc @@ -47,7 +47,7 @@ maggeo_writemsg(const char* const buf) } static void -maggeo_rd_init(const char* fname) +maggeo_rd_init(const QString& fname) { maggeofile_in = gbfopen(fname, "rb", MYNAME); } @@ -59,7 +59,7 @@ maggeo_rd_deinit(void) } static void -maggeo_wr_init(const char* fname) +maggeo_wr_init(const QString& fname) { if (waypt_count() > 200) { fatal(MYNAME ": eXplorist does not support more than 200 waypoints in one .gs file.\nDecrease the number of waypoints sent.\n"); diff --git a/magproto.cc b/magproto.cc index 5161e5adf..7c82e9fb2 100644 --- a/magproto.cc +++ b/magproto.cc @@ -32,6 +32,7 @@ #include #include #include +#include static int bitrate = 4800; static int wptcmtcnt; @@ -57,7 +58,7 @@ static char* nukewpt = NULL; static int route_out_count; static int waypoint_read_count; static int wpt_len = 8; -static const char* curfname; +static QString curfname; static int extension_hint; // For Explorist GC/510/610/710 familes, bludgeon in GPX support. // (This has nothing to do with the Explorist 100...600 products.) @@ -569,10 +570,10 @@ retry: static void* serial_handle = NULL; static int -terminit(const char* portname, int create_ok) +terminit(const QString& portname, int create_ok) { - if (gbser_is_serial(portname)) { - if (serial_handle = gbser_init(portname), NULL != serial_handle) { + if (gbser_is_serial(qPrintable(portname))) { + if (serial_handle = gbser_init(qPrintable(portname)), NULL != serial_handle) { int rc; if (rc = gbser_set_port(serial_handle, bitrate, 8, 0, 1), gbser_OK != rc) { fatal(MYNAME ": Can't configure port\n"); @@ -580,7 +581,7 @@ terminit(const char* portname, int create_ok) } is_file = 0; if (serial_handle == NULL) { - fatal(MYNAME ": Could not open serial port %s\n", portname); + fatal(MYNAME ": Could not open serial port %s\n", qPrintable(portname)); } return 1; } else { @@ -723,7 +724,7 @@ arglist_t mag_fargs[] = { * The part of the serial init that's common to read and write. */ static void -mag_serial_init_common(const char* portname) +mag_serial_init_common(const QString& portname) { time_t now, later; @@ -749,7 +750,7 @@ mag_serial_init_common(const char* portname) mag_readmsg(trkdata); if (current_time().toTime_t() > later) { fatal(MYNAME ": No acknowledgment from GPS on %s\n", - portname); + qPrintable(portname)); } } @@ -775,14 +776,13 @@ mag_serial_init_common(const char* portname) } static void -mag_rd_init_common(const char* portname) +mag_rd_init_common(const QString& portname) { - const char* ext; waypoint_read_count = 0; // For Explorist GC, intercept the device access and redirect to GPX. // We actually do the rd_init() inside read as we may have multiple // files that we have to read. - if (0 == strcmp(portname, "usb:")) { + if (portname == "usb:") { const char** dlist = os_get_magellan_mountpoints(); explorist_info = explorist_ini_get(dlist); if (explorist_info) { @@ -817,14 +817,13 @@ mag_rd_init_common(const char* portname) * queue or the WPT queue in the presence of (-w -r -t) we * divine a hint from the filename extension when we can. */ - ext = strrchr(curfname, '.'); - if (ext) { - ext++; - if (0 == case_ignore_strcmp(ext, "upt")) { + QString exten = QFileInfo(curfname).suffix(); + if (exten.length() > 0) { + if (0 == exten.compare("upt", Qt::CaseInsensitive)) { extension_hint = WPTDATAMASK; - } else if (0 == case_ignore_strcmp(ext, "log")) { + } else if (0 == exten.compare("log", Qt::CaseInsensitive)) { extension_hint = TRKDATAMASK; - } else if (0 == case_ignore_strcmp(ext, "rte")) { + } else if (0 == exten.compare("rte", Qt::CaseInsensitive)) { extension_hint = RTEDATAMASK; } } @@ -833,7 +832,7 @@ mag_rd_init_common(const char* portname) } static void -mag_rd_init(const char* portname) +mag_rd_init(const QString& portname) { explorist = 0; suppress_ack = 1; @@ -841,14 +840,14 @@ mag_rd_init(const char* portname) } static void -magX_rd_init(const char* portname) +magX_rd_init(const QString& portname) { explorist = 1; mag_rd_init_common(portname); } static void -mag_wr_init_common(const char* portname) +mag_wr_init_common(const QString& portname) { suppress_ack = 0; if (bs) { @@ -879,7 +878,7 @@ mag_wr_init_common(const char* portname) * Entry point for extended (explorist) points. */ static void -magX_wr_init(const char* portname) +magX_wr_init(const QString& portname) { wpt_len = 20; explorist = 1; @@ -889,7 +888,7 @@ magX_wr_init(const char* portname) } static void -mag_wr_init(const char* portname) +mag_wr_init(const QString& portname) { explorist = 0; wpt_len = 8; @@ -918,6 +917,8 @@ mag_deinit(void) waypt_flush(&rte_wpt_tmp); trk_head = NULL; + + curfname.clear(); } static void diff --git a/main.cc b/main.cc index 43bde9ed7..32e1bd444 100644 --- a/main.cc +++ b/main.cc @@ -18,6 +18,7 @@ */ #include +#include #include "defs.h" #include "filterdefs.h" @@ -240,6 +241,15 @@ main(int argc, char* argv[]) queue* wpt_head_bak, *rte_head_bak, *trk_head_bak; /* #ifdef UTF8_SUPPORT */ signed int wpt_ct_bak, rte_ct_bak, trk_ct_bak; /* #ifdef UTF8_SUPPORT */ arg_stack_t* arg_stack = NULL; + + // Create a QCoreApplication object to handle application initialization. + // TODO: Someday we may actually use this, but for now we are just trying + // to get Qt initialized, especially locale related QTextCodec stuff. + // For example, this will get the QTextCodec::codecForLocale set + // correctly. + QCoreApplication app(argc, argv); + // TODO: use QCoreApplication::arguments() to process command line. + (void) new gpsbabel::UsAsciiCodec(); /* make sure a US-ASCII codec is available */ #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) @@ -254,12 +264,14 @@ main(int argc, char* argv[]) // The first invocation of QTextCodec::codecForLocale() may result in LC_ALL being set to the native environment // as opposed to the initial default "C" locale. // This was demonstrated with Qt5 on Mac OS X. + // TODO: This need to invoke QTextCodec::codecForLocale() may be taken care of + // by creating a QCoreApplication. #ifdef DEBUG_LOCALE - printf("%s\n",setlocale(LC_ALL, NULL)); + printf("Initial locale: %s\n",setlocale(LC_ALL, NULL)); #endif (void) QTextCodec::codecForLocale(); #ifdef DEBUG_LOCALE - printf("%s\n",setlocale(LC_ALL, NULL)); + printf("Locale after codedForLocale: %s\n",setlocale(LC_ALL, NULL)); #endif // As recommended in QCoreApplication reset the locale to the default. // Note the documentation says to set LC_NUMERIC, but QCoreApplicationPrivate::initLocale() @@ -271,7 +283,17 @@ main(int argc, char* argv[]) #endif setlocale(LC_NUMERIC,"C"); #ifdef DEBUG_LOCALE - printf("%s\n",setlocale(LC_ALL, NULL)); + printf("LC_ALL: %s\n",setlocale(LC_ALL, NULL)); +#endif + } + /* reset LC_TIME for strftime */ + if (strcmp(setlocale(LC_TIME,0), "C") != 0) { +#ifdef DEBUG_LOCALE + printf("Resetting LC_TIME\n"); +#endif + setlocale(LC_TIME,"C"); +#ifdef DEBUG_LOCALE + printf("LC_ALL: %s\n",setlocale(LC_ALL, NULL)); #endif } @@ -394,7 +416,7 @@ main(int argc, char* argv[]) cet_convert_init(ivecs->encode, ivecs->fixed_encode); /* init by module vec */ start_session(ivecs->name, fname); - ivecs->rd_init(fname); + ivecs->rd_init(QString::fromLocal8Bit(fname)); ivecs->read(); ivecs->rd_deinit(); @@ -426,7 +448,7 @@ main(int argc, char* argv[]) trk_ct_bak = -1; rte_head_bak = trk_head_bak = NULL; - ovecs->wr_init(ofname); + ovecs->wr_init(QString::fromLocal8Bit(ofname)); if (global_opts.charset != &cet_cs_vec_utf8) { /* @@ -628,7 +650,7 @@ main(int argc, char* argv[]) if (ivecs->rd_init == NULL) { fatal("Format does not support reading.\n"); } - ivecs->rd_init(argv[0]); + ivecs->rd_init(QString::fromLocal8Bit(argv[0])); ivecs->read(); ivecs->rd_deinit(); @@ -643,7 +665,7 @@ main(int argc, char* argv[]) fatal("Format does not support writing.\n"); } - ovecs->wr_init(argv[1]); + ovecs->wr_init(QString::fromLocal8Bit(argv[1])); ovecs->write(); ovecs->wr_deinit(); @@ -689,7 +711,7 @@ main(int argc, char* argv[]) fatal("An input file (-f) must be specified.\n"); } start_session(ivecs->name, fname); - ivecs->position_ops.rd_init(fname); + ivecs->position_ops.rd_init(QString::fromLocal8Bit(fname)); } if (global_opts.masked_objective & ~POSNDATAMASK) { @@ -707,7 +729,7 @@ main(int argc, char* argv[]) } if (ovecs && ovecs->position_ops.wr_init) { - ovecs->position_ops.wr_init(ofname); + ovecs->position_ops.wr_init(QString::fromLocal8Bit(ofname)); } tracking_status.request_terminate = 0; @@ -724,7 +746,7 @@ main(int argc, char* argv[]) } if (wpt) { if (ovecs) { -// ovecs->position_ops.wr_init(ofname); +// ovecs->position_ops.wr_init(QString::fromLocal8Bit(ofname)); ovecs->position_ops.wr_position(wpt); // ovecs->position_ops.wr_deinit(); } else { diff --git a/mapasia.cc b/mapasia.cc index c948791a1..8ca0ef98c 100644 --- a/mapasia.cc +++ b/mapasia.cc @@ -61,7 +61,7 @@ arglist_t tr7_args[] = { *******************************************************************************/ static void -tr7_rd_init(const char* fname) +tr7_rd_init(const QString& fname) { fin = gbfopen_le(fname, "rb", MYNAME); } @@ -263,7 +263,7 @@ tr7_disp_waypt_cb(const Waypoint* wpt) } static void -tr7_wr_init(const char* fname) +tr7_wr_init(const QString& fname) { fout = gbfopen_le(fname, "wb", MYNAME); gbfputint32(TR7_TRACK_MAGIC, fout); diff --git a/mapbar_track.cc b/mapbar_track.cc index 029ebe8c4..7bb249f26 100644 --- a/mapbar_track.cc +++ b/mapbar_track.cc @@ -38,7 +38,7 @@ arglist_t mapbar_track_args[] = { *******************************************************************************/ static void -mapbar_track_rd_init(const char* fname) +mapbar_track_rd_init(const QString& fname) { fin = gbfopen(fname, "r", MYNAME); } diff --git a/mapfactor.cc b/mapfactor.cc index f662eaf5f..6b478f450 100644 --- a/mapfactor.cc +++ b/mapfactor.cc @@ -68,7 +68,7 @@ void MapfactorRead() } static void -mapfactor_rd_init(const char* fname) +mapfactor_rd_init(const QString& fname) { mapfactor_read_fname = fname; } @@ -98,7 +98,7 @@ mapfactor_rd_deinit(void) } static void -mapfactor_wr_init(const char* fname) +mapfactor_wr_init(const QString& fname) { oqfile = new gpsbabel::File(fname); oqfile->open(QIODevice::WriteOnly | QIODevice::Text); diff --git a/mapsend.cc b/mapsend.cc index b0caad99a..fec6ef5c1 100644 --- a/mapsend.cc +++ b/mapsend.cc @@ -72,7 +72,7 @@ mapsend_init_opts(const char isReading) /* 1=read, 2=write */ } static void -mapsend_rd_init(const char* fname) +mapsend_rd_init(const QString& fname) { mapsend_init_opts(1); mapsend_file_in = gbfopen_le(fname, "rb", MYNAME); @@ -85,7 +85,7 @@ mapsend_rd_deinit(void) } static void -mapsend_wr_init(const char* fname) +mapsend_wr_init(const QString& fname) { mapsend_init_opts(0); mapsend_file_out = gbfopen(fname, "wb", MYNAME); diff --git a/mapsource.cc b/mapsource.cc index 81fe6981b..b1769f6bb 100644 --- a/mapsource.cc +++ b/mapsource.cc @@ -26,6 +26,7 @@ #include "jeeps/gpsmath.h" #include #include +#include static gbfile* mps_file_in; static gbfile* mps_file_out; @@ -37,8 +38,8 @@ static int mps_ver_out = 0; static int mps_ver_temp = 0; /* Temporary pathname used when merging gpsbabel output with an existing file */ -static char* tempname; -static char* fin_name; +static QString tempname; +static QString fin_name; static const Waypoint* prevRouteWpt; /* Private queues of written out waypoints */ @@ -225,7 +226,7 @@ mps_converted_icon_number(const int icon_num, const int mpsver, garmin_formats_e } static void -mps_rd_init(const char* fname) +mps_rd_init(const QString& fname) { mps_file_in = gbfopen_le(fname, "rb", MYNAME); @@ -246,9 +247,9 @@ mps_rd_deinit(void) } static void -mps_wr_init(const char* fname) +mps_wr_init(const QString& fname) { - fin_name = xstrdup(fname); + fin_name = fname; if (mpsmergeouts) { mpsmergeout = atoi(mpsmergeouts); } @@ -265,14 +266,14 @@ mps_wr_init(const char* fname) /* create a temporary name based on a random char and the existing name */ /* then test if it already exists, if so try again with another rand num */ /* yeah, yeah, so there's probably a library function for this */ - xasprintf(&tempname, "%s.%08x", fname, rand()); + tempname = QString("%1.%2").arg(fname).arg(rand(), 8, 16, QChar('0')); mps_file_temp = gbfopen_le(tempname, "rb", MYNAME); if (mps_file_temp == NULL) { break; } gbfclose(mps_file_temp); } - rename(fname, tempname); + QFile::rename(fname, tempname); mps_file_temp = gbfopen_le(tempname, "rb", MYNAME); } } @@ -292,8 +293,8 @@ mps_wr_deinit(void) if (mpsmergeout) { gbfclose(mps_file_temp); - remove(tempname); - xfree(tempname); + QFile::remove(tempname); + tempname.clear(); } if (written_wpt_mkshort_handle) { @@ -302,7 +303,7 @@ mps_wr_deinit(void) /* flush the "private" queue of waypoints written */ mps_wpt_q_deinit(&written_wpt_head); mps_wpt_q_deinit(&written_route_wpt_head); - xfree(fin_name); + fin_name.clear(); } /* @@ -1844,8 +1845,8 @@ mps_write(void) /* then delete the "real" file and rename the temporarily renamed file back */ gbfclose(mps_file_temp); gbfclose(mps_file_out); - remove(fin_name); - rename(tempname, fin_name); + QFile::remove(fin_name); + QFile::rename(tempname, fin_name); fatal(MYNAME ": merge source version is %d, requested out version is %d\n", mps_ver_temp, atoi(mpsverout)); } } else { diff --git a/mmo.cc b/mmo.cc index ee7a53bf1..3c0d61726 100644 --- a/mmo.cc +++ b/mmo.cc @@ -994,7 +994,7 @@ mmo_finalize_rtept_cb(const Waypoint* wptref) *******************************************************************************/ static void -mmo_rd_init(const char* fname) +mmo_rd_init(const QString& fname) { int i; @@ -1445,7 +1445,7 @@ mmo_write_trk_tail_cb(const route_head* trk) /**************************************************************************/ static void -mmo_wr_init(const char* fname) +mmo_wr_init(const QString& fname) { fout = gbfopen_le(fname, "wb", MYNAME); diff --git a/mtk_locus.cc b/mtk_locus.cc index e0ab8fc0e..a6c430c6a 100644 --- a/mtk_locus.cc +++ b/mtk_locus.cc @@ -60,7 +60,7 @@ arglist_t mtk_locus_args[] = { ARG_TERMINATOR }; -static void mtk_locus_rd_init(const char* fname); +static void mtk_locus_rd_init(const QString& fname); static void mtk_locus_rd_deinit(void); static void mtk_locus_read(void); @@ -118,16 +118,16 @@ static int calculate_checksum(const char* s, int length); static void dbg(int l, const char* msg, ...); static void -mtk_locus_rd_init(const char* fname) +mtk_locus_rd_init(const QString& fname) { - dbg(1, "Opening file: %s\n", fname); + dbg(1, "Opening file: %s\n", qPrintable(fname)); - if (gbser_is_serial(fname)) { + if (gbser_is_serial(qPrintable(fname))) { dbg(1, "Input is a serial port\n"); read_mode = rm_serial; - if ((sfd = gbser_init(fname)) == NULL) { - fatal(MYNAME ": Can't initialise port \"%s\" (%s)\n", fname, strerror(errno)); + if ((sfd = gbser_init(qPrintable(fname))) == NULL) { + fatal(MYNAME ": Can't initialise port \"%s\" (%s)\n", qPrintable(fname), strerror(errno)); } set_baudrate(); gbser_flush(sfd); @@ -137,7 +137,7 @@ mtk_locus_rd_init(const char* fname) dbg(1, "Input is a normal file\n"); read_mode = rm_file; if ((ffd = gbfopen(fname, "rb", MYNAME)) == NULL) { - fatal(MYNAME ": Can't initialise port \"%s\" (%s)\n", fname, strerror(errno)); + fatal(MYNAME ": Can't initialise port \"%s\" (%s)\n", qPrintable(fname), strerror(errno)); } } diff --git a/mtk_logger.cc b/mtk_logger.cc index 95100be6d..51f3b1283 100644 --- a/mtk_logger.cc +++ b/mtk_logger.cc @@ -240,8 +240,8 @@ const char CMD_LOG_ERASE[] = "$PMTK182,6,1*3E\r\n"; const char CMD_LOG_STATUS[] = "$PMTK182,2,7*3C\r\n"; static int mtk_log_len(unsigned int bitmask); -static void mtk_rd_init(const char* fname); -static void file_init(const char* fname); +static void mtk_rd_init(const QString& fname); +static void file_init(const QString& fname); static void file_deinit(void) ; static void holux245_init(void); static void file_read(void); @@ -417,21 +417,21 @@ static int do_cmd(const char* cmd, const char* expect, char** rslt, time_t timeo /******************************************************************************* * %%% global callbacks called by gpsbabel main process %%% * *******************************************************************************/ -static void mtk_rd_init_m241(const char* fname) +static void mtk_rd_init_m241(const QString& fname) { mtk_device = HOLUX_M241; mtk_rd_init(fname); } -static void mtk_rd_init(const char* fname) +static void mtk_rd_init(const QString& fname) { int rc; char* model; - port = xstrdup(fname); + port = xstrdup(qPrintable(fname)); errno = 0; - dbg(1, "Opening port %s...\n", fname); + dbg(1, "Opening port %s...\n", port); if ((fd = gbser_init(port)) == NULL) { fatal(MYNAME ": Can't initialise port \"%s\" (%s)\n", port, strerror(errno)); } @@ -1418,17 +1418,17 @@ static int mtk_log_len(unsigned int bitmask) /********************** File-in interface ********************************/ -static void file_init_m241(const char* fname) +static void file_init_m241(const QString& fname) { mtk_device = HOLUX_M241; file_init(fname); } -static void file_init(const char* fname) +static void file_init(const QString& fname) { - dbg(4, "Opening file %s...\n", fname); - if (fl = fopen(fname, "rb"), NULL == fl) { - fatal(MYNAME ": Can't open file '%s'\n", fname); + dbg(4, "Opening file %s...\n", qPrintable(fname)); + if (fl = fopen(qPrintable(fname), "rb"), NULL == fl) { + fatal(MYNAME ": Can't open file '%s'\n", qPrintable(fname)); } switch (mtk_device) { case HOLUX_M241: diff --git a/mynav.cc b/mynav.cc index 3a660c551..5ac119625 100644 --- a/mynav.cc +++ b/mynav.cc @@ -123,7 +123,7 @@ mynav_rd_line(QString line) //*************************************************************************** static void -mynav_rd_init(const char* fname) +mynav_rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); mynav_track = route_head_alloc(); diff --git a/navicache.cc b/navicache.cc index db910daa7..c40ad9722 100644 --- a/navicache.cc +++ b/navicache.cc @@ -22,7 +22,7 @@ #include "src/core/file.h" static char* noretired = NULL; -static const char* read_fname = NULL; +static QString read_fname; static arglist_t nav_args[] = { @@ -91,7 +91,7 @@ nc_mkcont(const QString& t) } static void -nav_rd_init(const char* fname) +nav_rd_init(const QString& fname) { read_fname = fname; } @@ -208,7 +208,7 @@ nav_rd_deinit(void) } static void -nav_wr_init(const char* fname) +nav_wr_init(const QString& fname) { fatal(MYNAME ": Does not support writing Navicache files.\n"); } diff --git a/naviguide.cc b/naviguide.cc index 02314c824..76f2c783f 100644 --- a/naviguide.cc +++ b/naviguide.cc @@ -300,7 +300,7 @@ data_write(void) static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen_le(fname, "wb", MYNAME); ng_fill_header_default(); @@ -320,7 +320,7 @@ wr_deinit(void) /*=========================== Read data functions ==================================*/ static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen_le(fname, "rb", MYNAME); diff --git a/navilink.cc b/navilink.cc index c586c6570..bdf884a2f 100644 --- a/navilink.cc +++ b/navilink.cc @@ -1087,11 +1087,11 @@ nuke(void) } static void -navilink_common_init(const char* name) +navilink_common_init(const QString& name) { - if (gbser_is_serial(name)) { - if ((serial_handle = gbser_init(name)) == NULL) { - fatal(MYNAME ": Could not open serial port %s\n", name); + if (gbser_is_serial(qPrintable(name))) { + if ((serial_handle = gbser_init(qPrintable(name))) == NULL) { + fatal(MYNAME ": Could not open serial port %s\n", qPrintable(name)); } if (gbser_set_port(serial_handle, 115200, 8, 0, 1) != gbser_OK) { @@ -1130,14 +1130,14 @@ navilink_common_init(const char* name) } static void -navilink_rd_init(const char* name) +navilink_rd_init(const QString& name) { operation = READING; navilink_common_init(name); } static void -navilink_wr_init(const char* name) +navilink_wr_init(const QString& name) { operation = WRITING; navilink_common_init(name); diff --git a/navitel.cc b/navitel.cc index 13a46eee3..5626ef334 100644 --- a/navitel.cc +++ b/navitel.cc @@ -34,7 +34,7 @@ static int trkpts; *******************************************************************************/ static void -navitel_rd_init(const char* fname) +navitel_rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); } @@ -74,7 +74,7 @@ navitel_read_track(void) } static void -navitel_wr_init(const char* fname) +navitel_wr_init(const QString& fname) { fout = gbfopen(fname, "wb", MYNAME); } diff --git a/netstumbler.cc b/netstumbler.cc index b60b8f4b7..aef610ce5 100644 --- a/netstumbler.cc +++ b/netstumbler.cc @@ -65,7 +65,7 @@ arglist_t netstumbler_args[] = { }; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen(fname, "rb", MYNAME); macstumbler = 0; diff --git a/nmea.cc b/nmea.cc index 116a8e64e..150f68519 100644 --- a/nmea.cc +++ b/nmea.cc @@ -162,7 +162,7 @@ static struct tm tm; static Waypoint* curr_waypt; static Waypoint* last_waypt; static void* gbser_handle; -static const char* posn_fname; +static QString posn_fname; static queue pcmpt_head; static int without_date; /* number of created trackpoints without a valid date */ @@ -194,7 +194,7 @@ static int datum; static int had_checksum; static Waypoint* nmea_rd_posn(posn_status*); -static void nmea_rd_posn_init(const char* fname); +static void nmea_rd_posn_init(const QString& fname); arglist_t nmea_args[] = { {"snlen", &snlenopt, "Max length of waypoint name to write", "6", ARGTYPE_INT, "1", "64" }, @@ -262,7 +262,7 @@ nmea_release_wpt(Waypoint* wpt) } static void -nmea_rd_init(const char* fname) +nmea_rd_init(const QString& fname) { curr_waypt = NULL; last_waypt = NULL; @@ -317,10 +317,13 @@ nmea_rd_deinit(void) fatal("nmea_rd_deinit: illegal read_mode.\n"); break; } + + posn_fname.clear(); + } static void -nmea_wr_init(const char* portname) +nmea_wr_init(const QString& portname) { CHECK_BOOL(opt_gprmc); CHECK_BOOL(opt_gpgga); @@ -1096,13 +1099,13 @@ nmea_read(void) } void -nmea_rd_posn_init(const char* fname) +nmea_rd_posn_init(const QString& fname) { - if ((gbser_handle = gbser_init(fname)) != NULL) { + if ((gbser_handle = gbser_init(qPrintable(fname))) != NULL) { read_mode = rm_serial; gbser_set_speed(gbser_handle, 4800); } else { - fatal(MYNAME ": Could not open '%s' for position tracking.\n", fname); + fatal(MYNAME ": Could not open '%s' for position tracking.\n", qPrintable(fname)); } gbser_flush(gbser_handle); @@ -1206,7 +1209,7 @@ nmea_rd_posn(posn_status* posn_status) continue; } } - fatal(MYNAME ": No data received on %s.\n", posn_fname); + fatal(MYNAME ": No data received on %s.\n", qPrintable(posn_fname)); } nmea_parse_one_line(ibuf); if (lt != last_read_time) { @@ -1385,7 +1388,7 @@ nmea_write(void) } static void -nmea_wr_posn_init(const char* fname) +nmea_wr_posn_init(const QString& fname) { nmea_wr_init(fname); } diff --git a/nmn4.cc b/nmn4.cc index 41f5b8294..e466da291 100644 --- a/nmn4.cc +++ b/nmn4.cc @@ -243,7 +243,7 @@ nmn4_write_data(void) /* %%% global callbacks %%% */ static void -nmn4_rd_init(const char* fname) +nmn4_rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); } @@ -261,7 +261,7 @@ nmn4_read(void) } static void -nmn4_wr_init(const char* fname) +nmn4_wr_init(const QString& fname) { fout = gbfopen(fname, "wb", MYNAME); } diff --git a/osm.cc b/osm.cc index d5f91c86d..a0abe232b 100644 --- a/osm.cc +++ b/osm.cc @@ -676,7 +676,7 @@ osm_way_end(xg_string args, const QXmlStreamAttributes*) } static void -osm_rd_init(const char* fname) +osm_rd_init(const QString& fname) { wpt = NULL; rte = NULL; @@ -927,7 +927,7 @@ osm_rte_disp_trail(const route_head* rte) /*-----------------------------------------------------------------------------*/ static void -osm_wr_init(const char* fname) +osm_wr_init(const QString& fname) { fout = gbfopen(fname, "w", MYNAME); diff --git a/ozi.cc b/ozi.cc index 2786a8117..361db4b1d 100644 --- a/ozi.cc +++ b/ozi.cc @@ -30,6 +30,7 @@ #include /* for floor */ #include #include +#include #define MYNAME "OZI" #define BADCHARS ",\r\n" @@ -116,7 +117,7 @@ arglist_t ozi_args[] = { static gpsdata_type ozi_objective; -static char* ozi_ofname = NULL; +static QString ozi_ofname; static void ozi_copy_fsdata(ozi_fsdata** dest, ozi_fsdata* src) @@ -185,41 +186,37 @@ ozi_convert_datum(Waypoint* wpt) } static void -ozi_openfile(char* fname) +ozi_openfile(const QString& fname) { - char* c, *cx, *tmpname; const char* ozi_extensions[] = {0, "plt", "wpt", "rte"}; - char buff[32]; /* if we're doing multi-track output, sequence the filenames like: * mytrack.plt, mytrack-1.plt...unless we're writing to stdout. */ - if (0 == strcmp(fname, "-")) { + if (fname == "-") { if (! file_out) { file_out = gbfopen(fname, "wb", MYNAME); } return; } + QString buff; if ((track_out_count) && (ozi_objective == trkdata)) { - sprintf(buff, "-%d", track_out_count); + buff = QString("-%d").arg(track_out_count); } else { - buff[0] = '\0'; + buff = QString(""); } /* remove extension and add buff + ozi's extension */ - c = strrchr(fname, '.'); - if (c && (cx = strrchr(fname, '/')) && (cx > c)) { - c = NULL; - } - if (c && (cx = strrchr(fname, '\\')) && (cx > c)) { - c = NULL; - } - if (c == NULL) { - c = fname + strlen(fname); + QString sname(fname); + int suffix_len = QFileInfo(fname).suffix().length(); + if (suffix_len > 0) { + /* drop the suffix and the period */ + sname.chop(suffix_len + 1); } - xasprintf(&tmpname, "%*.*s%s.%s", (int)(c - fname),(int)(c - fname), fname, buff, ozi_extensions[ozi_objective]); + + QString tmpname = QString("%1%2.%3").arg(sname).arg(buff).arg(ozi_extensions[ozi_objective]); /* re-open file_out with the new filename */ if (file_out) { @@ -229,8 +226,6 @@ ozi_openfile(char* fname) file_out = gbfopen(tmpname, "wb", MYNAME); - xfree(tmpname); - return; } @@ -421,7 +416,7 @@ ozi_init_units(const int direction) /* 0 = in; 1 = out */ } static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen(fname, "rb", MYNAME); @@ -438,7 +433,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { /* At this point, we have no idea whether we'll be writing waypoint, @@ -446,7 +441,7 @@ wr_init(const char* fname) * we're actually ready to write. */ - ozi_ofname = (char*)fname; + ozi_ofname = fname; mkshort_handle = mkshort_new_handle(); @@ -484,7 +479,7 @@ wr_deinit(void) gbfclose(file_out); file_out = NULL; } - ozi_ofname = NULL; + ozi_ofname.clear(); mkshort_del_handle(&mkshort_handle); } diff --git a/pcx.cc b/pcx.cc index c0049acf7..52bfe4413 100644 --- a/pcx.cc +++ b/pcx.cc @@ -58,7 +58,7 @@ arglist_t pcx_args[] = { }; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen(fname, "rb", MYNAME); } @@ -70,7 +70,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen(fname, "w", MYNAME); mkshort_handle = mkshort_new_handle(); diff --git a/pocketfms_bc.cc b/pocketfms_bc.cc index 5fef6d9da..c263593cd 100644 --- a/pocketfms_bc.cc +++ b/pocketfms_bc.cc @@ -54,7 +54,7 @@ typedef struct breadcrumb { static gbfile* file_in, *file_out; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen_le(fname, "rb", MYNAME); } @@ -66,7 +66,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen_le(fname, "wb", MYNAME); } diff --git a/pocketfms_fp.cc b/pocketfms_fp.cc index 744747dbb..a31fe3b37 100644 --- a/pocketfms_fp.cc +++ b/pocketfms_fp.cc @@ -50,7 +50,7 @@ static xg_tag_mapping gl_map[] = { }; static void -rd_init(const char* fname) +rd_init(const QString& fname) { xml_init(fname, gl_map, NULL); } @@ -80,7 +80,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { fatal("Writing file of type %s is not supported\n", MYNAME); } diff --git a/pocketfms_wp.cc b/pocketfms_wp.cc index 072e501e6..7a730ae12 100644 --- a/pocketfms_wp.cc +++ b/pocketfms_wp.cc @@ -28,7 +28,7 @@ static gbfile* file_in, *file_out; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen_le(fname, "r", MYNAME); } @@ -96,7 +96,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen_le(fname, "w", MYNAME); } diff --git a/psitrex.cc b/psitrex.cc index 9f0dd9ca5..02cd7f258 100644 --- a/psitrex.cc +++ b/psitrex.cc @@ -179,7 +179,7 @@ psit_find_icon_number_from_desc(const char* desc) } static void -psit_rd_init(const char* fname) +psit_rd_init(const QString& fname) { psit_file_in = gbfopen(fname, "r", MYNAME); } @@ -191,7 +191,7 @@ psit_rd_deinit(void) } static void -psit_wr_init(const char* fname) +psit_wr_init(const QString& fname) { psit_file_out = gbfopen(fname, "w", MYNAME); } diff --git a/random.cc b/random.cc index 831d4e484..60ac8a628 100644 --- a/random.cc +++ b/random.cc @@ -97,7 +97,7 @@ rand_qstr(const int maxlen, const char* fmt) } static void -random_rd_init(const char* fname) +random_rd_init(const QString& fname) { } diff --git a/raymarine.cc b/raymarine.cc index 59fada1be..ebef78375 100644 --- a/raymarine.cc +++ b/raymarine.cc @@ -167,9 +167,9 @@ find_symbol_num(const QString& descr) /* ============================================= */ static void -raymarine_rd_init(const char* fname) +raymarine_rd_init(const QString& fname) { - fin = inifile_init(fname, MYNAME); + fin = inifile_init(qPrintable(fname), MYNAME); if (fin->unicode) { cet_convert_init(CET_CHARSET_UTF8, 1); } @@ -452,7 +452,7 @@ raymarine_new_short_handle(void) } static void -raymarine_wr_init(const char* fname) +raymarine_wr_init(const QString& fname) { fout = gbfopen(fname, "wb", MYNAME); diff --git a/saroute.cc b/saroute.cc index 4557e7775..d2cfe5b1c 100644 --- a/saroute.cc +++ b/saroute.cc @@ -80,7 +80,7 @@ Skip(gbfile* f, gbsize_t distance) } static void -rd_init(const char* fname) +rd_init(const QString& fname) { infile = gbfopen(fname, "rb", MYNAME); if (split && (turns_important || turns_only)) { @@ -464,7 +464,7 @@ my_read(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { fatal(MYNAME ":Not enough information is known about this format to write it.\n"); } diff --git a/sbn.cc b/sbn.cc index d19c3c7d5..45fecec0a 100644 --- a/sbn.cc +++ b/sbn.cc @@ -278,7 +278,7 @@ add_logpoints(route_head* track) /**********************************************************************/ static void -sbn_rd_init(const char* fname) +sbn_rd_init(const QString& fname) { file_handle = gbfopen(fname, "r", MYNAME); } diff --git a/sbp.cc b/sbp.cc index 31774693f..c940b7144 100644 --- a/sbp.cc +++ b/sbp.cc @@ -37,7 +37,7 @@ arglist_t sbp_args[] = { *******************************************************************************/ static void -sbp_rd_init(const char* fname) +sbp_rd_init(const QString& fname) { file_handle = gbfopen(fname, "r", MYNAME); } diff --git a/shape.cc b/shape.cc index 58157cb50..1256bc076 100644 --- a/shape.cc +++ b/shape.cc @@ -33,7 +33,7 @@ static unsigned poly_count; static double* polybufx; static double* polybufy; static double* polybufz; -static const char* ofname; +static QString ofname; static int nameidx; static int urlidx; @@ -54,16 +54,16 @@ arglist_t shp_args[] = { }; static void -my_rd_init(const char* fname) +my_rd_init(const QString& fname) { - ihandle = SHPOpen(fname, "rb"); + ihandle = SHPOpen(qPrintable(fname), "rb"); if (ihandle == NULL) { - fatal(MYNAME ":Cannot open shp file %s for reading\n", fname); + fatal(MYNAME ":Cannot open shp file %s for reading\n", qPrintable(fname)); } - ihandledb = DBFOpen(fname, "rb"); + ihandledb = DBFOpen(qPrintable(fname), "rb"); if (ihandledb == NULL) { - fatal(MYNAME ":Cannot open dbf file %s for reading\n", fname); + fatal(MYNAME ":Cannot open dbf file %s for reading\n", qPrintable(fname)); } if (opt_name) { @@ -89,13 +89,13 @@ my_rd_init(const char* fname) } else { nameidx = DBFGetFieldIndex(ihandledb, opt_name); if (nameidx == -1) { - fatal(MYNAME ":dbf file for %s doesn't have '%s' field.\n", fname, opt_name); + fatal(MYNAME ":dbf file for %s doesn't have '%s' field.\n", qPrintable(fname), opt_name); } } } else { nameidx = DBFGetFieldIndex(ihandledb, "NAME"); if (nameidx == -1) { -// fatal(MYNAME ":dbf file for %s doesn't have 'NAME' field.\n Please specify the name index with the 'name' option.\n", fname); +// fatal(MYNAME ":dbf file for %s doesn't have 'NAME' field.\n Please specify the name index with the 'name' option.\n", qPrintable(fname)); } } if (opt_url) { @@ -251,7 +251,7 @@ my_rd_deinit(void) } void -my_wr_init(const char* fname) +my_wr_init(const QString& fname) { ofname = fname; } @@ -260,6 +260,7 @@ void my_wr_deinit(void) { SHPClose(ohandle); + ofname.clear(); } void @@ -316,20 +317,20 @@ my_write(void) switch (global_opts.objective) { case wptdata: case unknown_gpsdata: - ohandle = SHPCreate(ofname, SHPT_POINT); + ohandle = SHPCreate(qPrintable(ofname), SHPT_POINT); if (ohandle == NULL) { fatal(MYNAME ":Cannot open %s for writing\n", - ofname); + qPrintable(ofname)); } waypt_disp_all(my_write_wpt); break; case trkdata: - ohandle = SHPCreate(ofname, SHPT_ARC); + ohandle = SHPCreate(qPrintable(ofname), SHPT_ARC); if (ohandle == NULL) { fatal(MYNAME ":Cannot open %s for writing\n", - ofname); + qPrintable(ofname)); } route_disp_all(poly_init, poly_deinit, poly_point); break; diff --git a/skyforce.cc b/skyforce.cc index e67ccda1a..b5433925f 100644 --- a/skyforce.cc +++ b/skyforce.cc @@ -236,7 +236,7 @@ skyforce_waypt_disp_cb(const Waypoint* wpt) *******************************************************************************/ static void -skyforce_rd_init(const char* fname) +skyforce_rd_init(const QString& fname) { fin = gbfopen(fname, "r", MYNAME); } @@ -318,7 +318,7 @@ skyforce_read(void) static void -skyforce_wr_init(const char* fname) +skyforce_wr_init(const QString& fname) { fout = gbfopen(fname, "w", MYNAME); diff --git a/skytraq.cc b/skytraq.cc index f3a4c73aa..3130bf244 100644 --- a/skytraq.cc +++ b/skytraq.cc @@ -54,7 +54,6 @@ #define MAX(X,Y) ((X) > (Y) ? (X) : (Y)) -static char* port; /* port name */ static void* serial_handle = 0; /* IO file descriptor */ static int skytraq_baud = 0; /* detected baud rate */ static gbfile* file_handle = 0; /* file descriptor (used by skytraq-bin format) */ @@ -1283,14 +1282,13 @@ skytraq_set_location(void) *******************************************************************************/ static void -skytraq_rd_init(const char* fname) +skytraq_rd_init(const QString& fname) { - port = xstrdup(fname); - if ((serial_handle = gbser_init(fname)) == NULL) { - fatal(MYNAME ": Can't open port '%s'\n", fname); + if ((serial_handle = gbser_init(qPrintable(fname))) == NULL) { + fatal(MYNAME ": Can't open port '%s'\n", qPrintable(fname)); } if ((skytraq_baud = skytraq_probe()) <= 0) { - fatal(MYNAME ": Can't find skytraq device on '%s'\n", fname); + fatal(MYNAME ": Can't find skytraq device on '%s'\n", qPrintable(fname)); } } @@ -1299,7 +1297,6 @@ skytraq_rd_deinit(void) { gbser_deinit(serial_handle); serial_handle = NULL; - xfree(port); } static void @@ -1338,11 +1335,11 @@ skytraq_read(void) } static void -file_init(const char* fname) +file_init(const QString& fname) { db(1, "Opening file...\n"); if ((file_handle = gbfopen(fname, "rb", MYNAME)) == NULL) { - fatal(MYNAME ": Can't open file '%s'\n", fname); + fatal(MYNAME ": Can't open file '%s'\n", qPrintable(fname)); } } @@ -1594,9 +1591,9 @@ static int miniHomer_set_poi(uint16_t poinum, const char* opt_poi) } return result; } -static const char* mhport; +static QString mhport; static void -miniHomer_rd_init(const char* fname) +miniHomer_rd_init(const QString& fname) { opt_set_location=NULL; // otherwise it will lead to bus error skytraq_rd_init(fname); // sets global var serial_handle @@ -1606,6 +1603,7 @@ static void miniHomer_rd_deinit(void) { skytraq_rd_deinit(); + mhport.clear(); } #define SETPOI(poinum, poiname) if (opt_set_poi_##poiname ) {miniHomer_set_poi(poinum, opt_set_poi_##poiname);} static void diff --git a/stmsdf.cc b/stmsdf.cc index 080c4479e..b94f9dcbd 100644 --- a/stmsdf.cc +++ b/stmsdf.cc @@ -359,7 +359,7 @@ parse_point(char* line) /* ----------------------------------------------------------- */ static void -rd_init(const char* fname) +rd_init(const QString& fname) { fin = gbfopen(fname, "r", MYNAME); @@ -671,7 +671,7 @@ track_disp_custom_cb(const Waypoint* wpt) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { fout = gbfopen(fname, "w", MYNAME); short_h = mkshort_new_handle(); diff --git a/stmwpp.cc b/stmwpp.cc index 3097bd72f..fcc333677 100644 --- a/stmwpp.cc +++ b/stmwpp.cc @@ -60,7 +60,7 @@ arglist_t stmwpp_args[] = { static void -stmwpp_rd_init(const char* fname) +stmwpp_rd_init(const QString& fname) { fin = gbfopen(fname, "rb", MYNAME); track = NULL; @@ -194,7 +194,7 @@ stmwpp_data_read(void) } static void -stmwpp_rw_init(const char* fname) +stmwpp_rw_init(const QString& fname) { fout = gbfopen(fname, "wb", MYNAME); short_h = mkshort_new_handle(); diff --git a/subrip.cc b/subrip.cc index d4e23a6d4..60e890212 100644 --- a/subrip.cc +++ b/subrip.cc @@ -195,7 +195,7 @@ subrip_trkpt_pr(const Waypoint* waypointp) /* global callback (exported) functions */ static void -subrip_wr_init(const char* fname) +subrip_wr_init(const QString& fname) { time_t gpstime_t; struct tm* ptm_gps; diff --git a/tef_xml.cc b/tef_xml.cc index c8a64f8d8..b32d69b3a 100644 --- a/tef_xml.cc +++ b/tef_xml.cc @@ -299,7 +299,7 @@ tef_point(xg_string args, const QXmlStreamAttributes* attrv) } static void -tef_xml_rd_init(const char* fname) +tef_xml_rd_init(const QString& fname) { wpt_tmp = NULL; waypoints = 0; diff --git a/teletype.cc b/teletype.cc index ca27ad07d..f25a26b08 100644 --- a/teletype.cc +++ b/teletype.cc @@ -38,7 +38,7 @@ static uint32_t tty_wpt_count; static gbfile* fin; static void -teletype_rd_init(const char* fname) +teletype_rd_init(const QString& fname) { char header[64]; diff --git a/text.cc b/text.cc index f55cf8cc9..ab40eee17 100644 --- a/text.cc +++ b/text.cc @@ -36,7 +36,7 @@ static char* degformat = NULL; static char* altunits = NULL; static char* split_output = NULL; static int waypoint_count; -static char* output_name; +static QString output_name; #define MYNAME "TEXT" @@ -74,10 +74,10 @@ arglist_t text_args[] = { static void -wr_init(const char* fname) +wr_init(const QString& fname) { waypoint_count = 0; - output_name = xstrdup(fname); + output_name = fname; if (!split_output) { file_out = gbfopen(fname, "w", MYNAME); } @@ -91,7 +91,7 @@ wr_deinit(void) gbfclose(file_out); } mkshort_del_handle(&mkshort_handle); - xfree(output_name); + output_name.clear(); } static void diff --git a/tiger.cc b/tiger.cc index 32e187366..6d1e2d64e 100644 --- a/tiger.cc +++ b/tiger.cc @@ -126,7 +126,7 @@ arglist_t tiger_args[] = { static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen(fname, "rb", MYNAME); mkshort_handle = mkshort_new_handle(); @@ -140,7 +140,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen(fname, "w", MYNAME); thresh_days = strtod(oldthresh, NULL); diff --git a/tmpro.cc b/tmpro.cc index 26c5fb781..083eb489d 100644 --- a/tmpro.cc +++ b/tmpro.cc @@ -43,7 +43,7 @@ static gbfile* file_in, *file_out; static short_handle mkshort_handle; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen(fname, "rb", MYNAME); } @@ -55,7 +55,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen(fname, "w", MYNAME); } diff --git a/tomtom.cc b/tomtom.cc index 6e8bddf1d..2ddc4309b 100644 --- a/tomtom.cc +++ b/tomtom.cc @@ -54,7 +54,7 @@ arglist_t tomtom_args[] = { }; static void -rd_init(const char* fname) +rd_init(const QString& fname) { file_in = gbfopen_le(fname, "rb", MYNAME); } @@ -66,7 +66,7 @@ rd_deinit(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen_le(fname, "wb", MYNAME); } diff --git a/tpg.cc b/tpg.cc index 0c399591f..8e710ba7a 100644 --- a/tpg.cc +++ b/tpg.cc @@ -69,7 +69,7 @@ tpg_common_init(void) } static void -tpg_rd_init(const char* fname) +tpg_rd_init(const QString& fname) { tpg_common_init(); tpg_file_in = gbfopen_le(fname, "rb", MYNAME); @@ -82,7 +82,7 @@ tpg_rd_deinit(void) } static void -tpg_wr_init(const char* fname) +tpg_wr_init(const QString& fname) { tpg_common_init(); tpg_file_out = gbfopen_le(fname, "wb", MYNAME); diff --git a/tpo.cc b/tpo.cc index 90060fe57..be4d932a4 100644 --- a/tpo.cc +++ b/tpo.cc @@ -1392,7 +1392,7 @@ void tpo_read_3_x(void) static void -tpo_rd_init(const char* fname) +tpo_rd_init(const QString& fname) { // preprare for an attempt to deallocate memory that may or may not get allocated @@ -1879,7 +1879,7 @@ tpo_track_tlr(const route_head* rte) } static void -tpo_wr_init(const char* fname) +tpo_wr_init(const QString& fname) { if (doing_wpts || doing_rtes) { fatal(MYNAME ": this file format only supports tracks, not waypoints or routes.\n"); diff --git a/unicsv.cc b/unicsv.cc index 6a2830ca0..c283a3d7b 100644 --- a/unicsv.cc +++ b/unicsv.cc @@ -590,7 +590,7 @@ unicsv_fondle_header(QString s) } static void -unicsv_rd_init(const char* fname) +unicsv_rd_init(const QString& fname) { char* c; unicsv_altscale = 1.0; @@ -1834,7 +1834,7 @@ unicsv_waypt_disp_cb(const Waypoint* wpt) static void -unicsv_wr_init(const char* filename) +unicsv_wr_init(const QString& filename) { fout = gbfopen(filename, "wb", MYNAME); diff --git a/util.cc b/util.cc index fb561f57e..f3cc17abe 100644 --- a/util.cc +++ b/util.cc @@ -31,6 +31,7 @@ #include #include // for va_copy #include +#include // First test Apple's clever macro that's really a runtime test so // that our universal binaries work right. @@ -1792,24 +1793,9 @@ char* xml_attribute(xml_tag* tag, const char* attrname) return result; } -const char* get_filename(const char* fname) +const QString get_filename(const QString& fname) { - const char* res; - const char* cb; - const char* cs; - - cb = strrchr(fname, '\\'); - cs = strrchr(fname, '/'); - - if (cb == NULL) { - res = cs; - } else if (cs == NULL) { - res = cb; - } else { - res = (cs > cb) ? cs : cb; - } - - return (res == NULL) ? (char*) fname : ++res; + return QFileInfo(fname).fileName(); } /* bit manipulation functions */ diff --git a/v900.cc b/v900.cc index 16c4860b2..888387d72 100644 --- a/v900.cc +++ b/v900.cc @@ -159,16 +159,16 @@ v900_log(const char* fmt, ...) } static void -v900_rd_init(const char* fname) +v900_rd_init(const QString& fname) { - v900_log("%s(%s)\n",__func__,fname); + v900_log("%s(%s)\n",__func__,qPrintable(fname)); /* note: file is opened in binary mode, since lines end with \r\n, and in windows text mode that will be translated to a single \n, making the line len one character shorter than on linux machines. */ - fin = fopen(fname,"rb"); + fin = fopen(qPrintable(fname),"rb"); if (!fin) { - fatal("v900: could not open '%s'.\n", fname); + fatal("v900: could not open '%s'.\n", qPrintable(fname)); } } diff --git a/vcf.cc b/vcf.cc index 740e3e891..aecef6940 100644 --- a/vcf.cc +++ b/vcf.cc @@ -41,7 +41,7 @@ arglist_t vcf_args[] = { }; static void -wr_init(const char* fname) +wr_init(const QString& fname) { file_out = gbfopen(fname, "w", MYNAME); mkshort_handle = mkshort_new_handle(); diff --git a/vidaone.cc b/vidaone.cc index a4d42d0f8..72d7756bf 100644 --- a/vidaone.cc +++ b/vidaone.cc @@ -59,7 +59,7 @@ static gbfile* fin, *fout; *******************************************************************************/ static void -vidaone_rd_init(const char* fname) +vidaone_rd_init(const QString& fname) { vidaone_ver = atoi(vidaone_opt_ver); fin = gbfopen(fname, "rb", MYNAME); @@ -101,7 +101,7 @@ vidaone_read(void) } static void -vidaone_wr_init(const char* fname) +vidaone_wr_init(const QString& fname) { vidaone_ver = atoi(vidaone_opt_ver); fout = gbfopen(fname, "wb", MYNAME); diff --git a/vitosmt.cc b/vitosmt.cc index 6d1471360..61ea029d6 100644 --- a/vitosmt.cc +++ b/vitosmt.cc @@ -54,7 +54,7 @@ WriteDouble(void* ptr, double d) static void -rd_init(const char* fname) +rd_init(const QString& fname) { infile = gbfopen_le(fname, "rb", MYNAME); } @@ -220,7 +220,7 @@ vitosmt_read(void) } static void -wr_init(const char* fname) +wr_init(const QString& fname) { warning(MYNAME " write: format is experimental and may crash Vito Navigator II.\n"); ofs = gbfopen_le(fname, "wb", MYNAME); diff --git a/vitovtt.cc b/vitovtt.cc index 4101ea1e9..2a3b5ce96 100644 --- a/vitovtt.cc +++ b/vitovtt.cc @@ -43,7 +43,7 @@ static const int vitovtt_secondscale = 30000000; static const int vitovtt_microsecondscale = 30; static void -rd_init(const char* fname) +rd_init(const QString& fname) { infile = gbfopen_le(fname, "rb", MYNAME); } diff --git a/vpl.cc b/vpl.cc index 8e845b872..3db5cb9f1 100644 --- a/vpl.cc +++ b/vpl.cc @@ -126,7 +126,7 @@ static route_head* track_head; *******************************************************************************/ static void -vpl_rd_init(const char* fname) +vpl_rd_init(const QString& fname) { vpl_file_in = gbfopen(fname, "r", MYNAME); } @@ -156,7 +156,7 @@ vpl_read(void) } static void -vpl_wr_init(const char* fname) +vpl_wr_init(const QString& fname) { fatal("Writing file of type %s is not support\n", MYNAME); } diff --git a/wbt-200.cc b/wbt-200.cc index d4698b87c..19ea0f9ed 100644 --- a/wbt-200.cc +++ b/wbt-200.cc @@ -392,9 +392,9 @@ static wintec_gps_types guess_device() } -static void rd_init(const char* fname) +static void rd_init(const QString& fname) { - port = xstrdup(fname); + port = xstrdup(qPrintable(fname)); db(1, "Opening port...\n"); if ((fd = gbser_init(port)) == NULL) { @@ -427,11 +427,11 @@ static int rd_buf(void* buf, int len) return 1; } -static void file_init(const char* fname) +static void file_init(const QString& fname) { db(1, "Opening file...\n"); - if ((fl = fopen(fname, "rb")) == NULL) { - fatal(MYNAME ": Can't open file '%s'\n", fname); + if ((fl = fopen(qPrintable(fname), "rb")) == NULL) { + fatal(MYNAME ": Can't open file '%s'\n", qPrintable(fname)); } } diff --git a/wfff_xml.cc b/wfff_xml.cc index dc808b5fb..d010c0e15 100644 --- a/wfff_xml.cc +++ b/wfff_xml.cc @@ -200,7 +200,7 @@ void wfff_e(xg_string args, const QXmlStreamAttributes*) } void -wfff_xml_rd_init(const char* fname) +wfff_xml_rd_init(const QString& fname) { tosscount = 0; diff --git a/wintec_tes.cc b/wintec_tes.cc index 117ead718..8b6ffe021 100644 --- a/wintec_tes.cc +++ b/wintec_tes.cc @@ -27,7 +27,7 @@ static gbfile* fin; static void -wintec_tes_rd_init(const char* fname) +wintec_tes_rd_init(const QString& fname) { fin = gbfopen(fname, "r", MYNAME); } diff --git a/xcsv.cc b/xcsv.cc index 8b2e65581..a535554e7 100644 --- a/xcsv.cc +++ b/xcsv.cc @@ -531,7 +531,7 @@ xcsv_setup_internal_style(const char* style_buf) static void -xcsv_rd_init(const char* fname) +xcsv_rd_init(const QString& fname) { /* @@ -550,7 +550,7 @@ xcsv_rd_init(const char* fname) if ((xcsv_file.datatype == 0) || (xcsv_file.datatype == wptdata)) { if (global_opts.masked_objective & (TRKDATAMASK|RTEDATAMASK)) { - warning(MYNAME " attempt to read %s as a track or route, but this format only supports waypoints on read. Reading as waypoints instead.\n", fname); + warning(MYNAME " attempt to read %s as a track or route, but this format only supports waypoints on read. Reading as waypoints instead.\n", qPrintable(fname)); } } @@ -568,7 +568,7 @@ xcsv_rd_deinit(void) } static void -xcsv_wr_init(const char* fname) +xcsv_wr_init(const QString& fname) { /* if we don't have an internal style defined, we need to * read it from a user-supplied style file, or die trying. @@ -587,7 +587,7 @@ xcsv_wr_init(const char* fname) } xcsv_file.xcsvfp = gbfopen(fname, "w", MYNAME); - xcsv_file.fname = (char*)fname; + xcsv_file.fname = fname; /* set mkshort options from the command line */ if (global_opts.synthesize_shortnames) { @@ -616,7 +616,7 @@ xcsv_wr_init(const char* fname) } static void -xcsv_wr_position_init(const char* fname) +xcsv_wr_position_init(const QString& fname) { xcsv_wr_init(fname); } diff --git a/xmlgeneric.cc b/xmlgeneric.cc index c7a123be2..570bb9ddd 100644 --- a/xmlgeneric.cc +++ b/xmlgeneric.cc @@ -39,7 +39,7 @@ static QString current_tag; static xg_tag_mapping* xg_tag_tbl; static QSet xg_ignore_taglist; -static const char* rd_fname; +static QString rd_fname; static QByteArray reader_data; static const char* xg_encoding; static QTextCodec* utf8_codec = QTextCodec::codecForName("UTF-8"); @@ -70,7 +70,7 @@ xml_tbl_lookup(const QString& tag, xg_cb_type cb_type) } void -xml_init(const char* fname, xg_tag_mapping* tbl, const char* encoding) +xml_init(const QString& fname, xg_tag_mapping* tbl, const char* encoding) { rd_fname = fname; xg_tag_tbl = tbl; @@ -87,7 +87,7 @@ void xml_deinit(void) { reader_data.clear(); - rd_fname = NULL; + rd_fname.clear(); xg_tag_tbl = NULL; xg_encoding = NULL; codec = utf8_codec; diff --git a/xmlgeneric.h b/xmlgeneric.h index 675a517f9..487866d1d 100644 --- a/xmlgeneric.h +++ b/xmlgeneric.h @@ -39,7 +39,7 @@ typedef struct xg_tag_mapping { extern const char* xhtml_entities; void xml_ignore_tags(const char** taglist); -void xml_init(const char* fname, xg_tag_mapping* tbl,const char* encoding); +void xml_init(const QString& fname, xg_tag_mapping* tbl,const char* encoding); void xml_init_offset(const char* fname, xg_tag_mapping* tbl, const char* encoding, gbsize_t offset); void xml_read(void); diff --git a/xol.cc b/xol.cc index 6f162f4d9..68afca685 100644 --- a/xol.cc +++ b/xol.cc @@ -131,7 +131,7 @@ static void xol_waypt(xg_string args, const QXmlStreamAttributes* attrv) { GPS_Math_Swiss_EN_To_WGS84(x, y, &wpt->latitude, &wpt->longitude); } -static void xol_rd_init(const char* fname) { +static void xol_rd_init(const QString& fname) { trk = NULL; wpt = NULL; @@ -155,7 +155,7 @@ static void xol_waypt_bound_calc(const Waypoint* wpt) { waypt_add_to_bounds(&all_bounds, wpt); } -static void xol_wr_init(const char* fname) { +static void xol_wr_init(const QString& fname) { oqfile = new gpsbabel::File(fname); oqfile->open(QIODevice::WriteOnly | QIODevice::Text); diff --git a/yahoo.cc b/yahoo.cc index 9aec81cb4..b7cda7311 100644 --- a/yahoo.cc +++ b/yahoo.cc @@ -55,7 +55,7 @@ static xg_tag_mapping gl_map[] = { }; static void -yahoo_rd_init(const char* fname) +yahoo_rd_init(const QString& fname) { xml_init(fname, gl_map, NULL); } @@ -73,7 +73,7 @@ yahoo_rd_deinit(void) } static void -yahoo_wr_init(const char* fname) +yahoo_wr_init(const QString& fname) { fatal("Writing file of type %s is not supported\n", MYNAME); } -- 2.30.2